LoginSignup
10
18

More than 3 years have passed since last update.

Pythonでmongodbを操作する~その1~

Posted at

前書

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名を取得するだけです。

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()

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に定義を追加して実行してみます。

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冊で即実践レベル!究極の入門書(専門書)

10
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
18