MongoDBをPythonで操作する(PyMongo使用)

MongoDBをインストールし、クライアントツールからの操作、
ブラウザでステータスの確認を試しました。


DebianにMongoDBをインストールする
MongoDBのクライアントツールを使用してデータを操作する
MongoDBのHttp Interface


Pythonから接続するためのモジュールでPyMongoが紹介されていたので試してみます。

http://api.mongodb.org/python/1.3%2B/index.html



※2014/7/24追記

復習の意味でチュートリアルをやってみました。
PyMongo 2.7.1のインストールと使い方(チュートリアル)



PyMongoのインストール



easy_installで簡単にインストールできました。


# easy_install pymongo





データの検索サンプル



データの取得は、
・コネクションの作成
・コネクションからデータベースの取得
・データベースからコレクションの取得
という手順で、目的のコレクションを取得します。

取得したコレクションに対して検索を実行します。

以下、find_oneとfindのサンプルです。


#!/usr/bin/env python
# -*- coding:utf-8 -*-

from pymongo import Connection

#コネクション作成
con = Connection('192.168.1.245', 27017)

#コネクションからtestデータベースを取得
db = con.test

# 以下のように記載することも可能
# db = con['test']

#testデータベースからfooコレクションを取得
col = db.foo

# 以下のように記載することも可能
# col = db['foo']

print "========find_one========"
print col.find_one()

print "========find========"
for data in col.find():
    print data

print "========find_query========"
for data in col.find({u'a':10}):
    print data




testデータベースのfooコレクションを検索しています。
実行結果は以下のとおり。


c:\>python sample.py
========find_one========
{u'a': 1.0, u'_id': ObjectId('4b3f270c114f5cca93dc6a89')}
========find========
{u'a': 1.0, u'_id': ObjectId('4b3f270c114f5cca93dc6a89')}
{u'a': 2.0, u'_id': ObjectId('4b3f3cfa0fc4428944029cb0')}
{u'a': 3.0, u'_id': ObjectId('4b3f3cfd0fc4428944029cb1')}
{u'a': 4.0, u'_id': ObjectId('4b3f3cff0fc4428944029cb2')}
{u'a': 5.0, u'_id': ObjectId('4b3f3d010fc4428944029cb3')}
{u'a': 6.0, u'_id': ObjectId('4b3f3d030fc4428944029cb4')}
{u'a': 7.0, u'_id': ObjectId('4b3f3d050fc4428944029cb5')}
{u'a': 8.0, u'_id': ObjectId('4b3f3d080fc4428944029cb6')}
{u'a': 9.0, u'_id': ObjectId('4b3f3d0a0fc4428944029cb7')}
{u'a': 10.0, u'_id': ObjectId('4b3f3d0d0fc4428944029cb8')}
{u'a': 11.0, u'_id': ObjectId('4b3f3d0f0fc4428944029cb9')}
========find_query========
{u'a': 10.0, u'_id': ObjectId('4b3f3d0d0fc4428944029cb8')}





ObjectIdを指定して検索



ObjectIdを指定して検索するには、pymongo.objectidのObjectIdを
importしてやります。


#!/usr/bin/env python
# -*- coding:utf-8 -*-

from pymongo import Connection
from pymongo.objectid import ObjectId

#コネクション作成
con = Connection('192.168.1.245', 27017)

#コネクションからtestデータベースを取得
db = con.test

#testデータベースからfooコレクションを取得
col = db.foo

print "========find_ObjectId========"
for data in col.find({u'_id' : ObjectId('4b3f3d050fc4428944029cb5')}):
    print data




実行結果は以下のとおり。


c:\>python sample.py
========find_ObjectId========
{u'a': 7.0, u'_id': ObjectId('4b3f3d050fc4428944029cb5')}





データの登録と更新



データの登録は、コレクションオブジェクトに対して、
insertメソッドを発行してやります。


#!/usr/bin/env python
# -*- coding:utf-8 -*-

from pymongo import Connection
from pymongo.objectid import ObjectId

#コネクション作成
con = Connection('192.168.1.245', 27017)

#コネクションからtestデータベースを取得
db = con.test

#testデータベースからfooコレクションを取得
col = db.foo

#データの更新
col.insert({'b' : 10})

for data in col.find({'b':10}):
    print data




実行してみると、ちゃんと登録されていることがわかります。


c:\>python sample.py
{u'_id': ObjectId('4b3f577f5179570a90000000'), u'b': 10}




もう一度実行すると・・・


c:\>python sample.py
{u'_id': ObjectId('4b3f577f5179570a90000000'), u'b': 10}
{u'_id': ObjectId('4b3f57d95179570b48000000'), u'b': 10}



同じ値が二つ登録されます。


クライアントツールで試したのと同様、いったん更新したいオブジェクトを
取得し、値を変更して更新します。



#!/usr/bin/env python
# -*- coding:utf-8 -*-

from pymongo import Connection
from pymongo.objectid import ObjectId

#コネクション作成
con = Connection('192.168.1.245', 27017)

#コネクションからtestデータベースを取得
db = con.test

#testデータベースからfooコレクションを取得
col = db.foo

data = col.find_one({'b':10})
data['b'] = 11
#データの更新
col.save(data)

for data in col.find({u'b':11}):
    print data

con.disconnect()




実行してみると


c:\>python sample.py
{u'_id': ObjectId('4b3f58f65179570a90000000'), u'b': 11}





データの削除



データの削除は、コレクションに対してremoveを実行します。


#!/usr/bin/env python
# -*- coding:utf-8 -*-

from pymongo import Connection
from pymongo.objectid import ObjectId

#コネクション作成
con = Connection('192.168.1.245', 27017)

#コネクションからtestデータベースを取得
db = con.test

#testデータベースからfooコレクションを取得
col = db.foo

print "===before==="
for data in col.find():
    print data

col.remove({'b':11})

print "===after==="
for data in col.find():
    print data

con.disconnect()




実行してみると、ちゃんとデータが削除されました。


c:\>python sample.py
===before===
{u'a': 1.0, u'_id': ObjectId('4b3f270c114f5cca93dc6a89')}
{u'a': 2.0, u'_id': ObjectId('4b3f3cfa0fc4428944029cb0')}
{u'a': 3.0, u'_id': ObjectId('4b3f3cfd0fc4428944029cb1')}
{u'a': 4.0, u'_id': ObjectId('4b3f3cff0fc4428944029cb2')}
{u'a': 5.0, u'_id': ObjectId('4b3f3d010fc4428944029cb3')}
{u'a': 6.0, u'_id': ObjectId('4b3f3d030fc4428944029cb4')}
{u'a': 7.0, u'_id': ObjectId('4b3f3d050fc4428944029cb5')}
{u'a': 8.0, u'_id': ObjectId('4b3f3d080fc4428944029cb6')}
{u'a': 9.0, u'_id': ObjectId('4b3f3d0a0fc4428944029cb7')}
{u'a': 10.0, u'_id': ObjectId('4b3f3d0d0fc4428944029cb8')}
{u'a': 11.0, u'_id': ObjectId('4b3f3d0f0fc4428944029cb9')}
{u'_id': ObjectId('4b3f58f65179570a90000000'), u'b': 11}
===after===
{u'a': 1.0, u'_id': ObjectId('4b3f270c114f5cca93dc6a89')}
{u'a': 2.0, u'_id': ObjectId('4b3f3cfa0fc4428944029cb0')}
{u'a': 3.0, u'_id': ObjectId('4b3f3cfd0fc4428944029cb1')}
{u'a': 4.0, u'_id': ObjectId('4b3f3cff0fc4428944029cb2')}
{u'a': 5.0, u'_id': ObjectId('4b3f3d010fc4428944029cb3')}
{u'a': 6.0, u'_id': ObjectId('4b3f3d030fc4428944029cb4')}
{u'a': 7.0, u'_id': ObjectId('4b3f3d050fc4428944029cb5')}
{u'a': 8.0, u'_id': ObjectId('4b3f3d080fc4428944029cb6')}
{u'a': 9.0, u'_id': ObjectId('4b3f3d0a0fc4428944029cb7')}
{u'a': 10.0, u'_id': ObjectId('4b3f3d0d0fc4428944029cb8')}
{u'a': 11.0, u'_id': ObjectId('4b3f3d0f0fc4428944029cb9')}




関連記事

コメント

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
https://symfo.web.fc2.com/

PR

検索フォーム

月別アーカイブ