#前書
pythonの学習を始めて2日目になります。
pythonと並行してmongodbも学習中のため、どうせなら一緒に勉強しようということでpythonでmongodbを操作してみました。
#当記事の記載範囲
この記事ではpythonでmongodbに接続し、DBの情報を取得するところまで記載しています。
collectionに対するCRUDはおいおい作成していこうと考えています。
#mongodbの起動
インストール方法などは省略させて頂きます。
以下のコマンドでmongodbを起動します。
> mongod
起動したコンソール上に以下のようなログが出力されます。
2019-08-07T20:46:55.219+0900 I NETWORK [initandlisten] waiting for connections on port 27017
このログが出ていれば、mongodbがポート27017で接続を受け付けているという状態になります。
※ポート:27017はmongodbのデフォルトで使われるポート
この記事で使用するmongodbのDB、collectionの内容はこのようになっています。
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
test 0.000GB
> show collections
employee
log
salary
> db.salary.find()
{ "_id" : ObjectId("5d4acf84de925ae437e2c123"), "name" : "山田", "salary" : 300000 }
{ "_id" : ObjectId("5d4acf84de925ae437e2c124"), "name" : "佐藤", "salary" : 400000 }
{ "_id" : ObjectId("5d4acf84de925ae437e2c125"), "name" : "田中", "salary" : 500000 }
#pymongoのインストール
以下のコマンドでPythonでmongodbを扱うためのライブラリをインストールします。
> pip install pymongo
#pythonのコードを書いてみる
早速、mongodbを操作してみます。
やることはDB内に存在するcollection名を取得するだけです。
from pymongo import MongoClient
class MongoSample(object):
def __init__(self, name):
self.client = MongoClient()
self.db = self.client[name] #DB名を設定
def collection_names(self):
return self.db.collection_names()
mongo = MongoSample('test')
print(mongo.collection_names())
実行結果
/python/MongoSample.py:17: DeprecationWarning: collection_names is deprecated. Use list_collection_names instead.
return self.db.collection_names()
['employee', 'salary', 'log']
取得できましたが、DeprecationWarningが出ています。
どうやらcollection_names()が非推奨なのでlist_collection_namesを使うようにとのことです。
MongoSample.pyに定義を追加して実行してみます。
from pymongo import MongoClient
class MongoSample(object):
def __init__(self, name):
self.client = MongoClient()
self.db = self.client[name] #DB名を設定
def collection_names(self):
return self.db.collection_names()
def list_collection_names(self):
return self.db.list_collection_names()
mongo = MongoSample('test')
print(mongo.list_collection_names())
実行結果
['employee', 'salary', 'log']
今度は警告なくcollection名が取得できました。
#感想
私はJava以外の言語を久しぶりに勉強してみたので、あれ?DBの操作ってこんなに簡単に出来たっけ?って感じです。
JavaだとDBへの接続はSingletonを使うことが一般的だと思いますが、mongodbはどうなんだろ?
トランザクションの制御はどうするんだろ?という新しい課題がたくさん出てきて楽しいなというのが正直な感想です。
#参考
MongoDB API Documentation
https://api.mongodb.com/python/current/api/index.html
書籍:MongoDB 解体新書:これ1冊で即実践レベル!究極の入門書(専門書)