MongoDBをPythonで操作する(PyMongo使用)
MongoDBをインストールし、クライアントツールからの操作、ブラウザでステータスの確認を試しました。
DebianにMongoDBをインストールする
MongoDBのクライアントツールを使用してデータを操作する
MongoDBのHttp Interface
Pythonから接続するためのモジュールでPyMongoが紹介されていたので試してみます。
http://api.mongodb.org/python/1.3%2B/index.html
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')}
- 関連記事
-
- MongoDBにインデックスを作成する
- MongoDBに一括でデータを登録する(Bulk Inserts)
- MongoDBをPythonで操作する(PyMongo使用)
- MongoDBのHttp Interface
- MongoDBのクライアントツールを使用してデータを操作する
コメント