[CentOS7][Python3] Pymongoの基本的な使い方

Facebook にシェア
Pocket
LINEで送る
このエントリーを Google ブックマーク に追加

Pymongoの基本的な使い方の紹介。

[amazonjs asin=”1617291609″ locale=”JP” title=”Mongodb in Action”]

前提

以下の手順でMongoDBをインストールし、MongoDBを起動しておく。

[CentOS7] MongoDB3.0をインストール

 

venvで仮想環境の構築とpymongoのインストール

venvで仮想環境を切ってpymongoをインストールする。

[shell] $ pyvenv ~/mongo_python
$ source ~/mongo_python/bin/activate
(mongo_python)$ pip install –upgrade pymongo
(mongo_python)$ pip install pymongo
[/shell]

 

以降のサンプルコードはこちら

 

データを挿入する

~/mongo_pythonディレクトリ配下にsourceディレクトリを作成し、そこにソースを設置していく。
最初にデータを挿入してみる。insert_oneメソッドを利用するとデータを一つ挿入できる。
データを挿入するデータベース、コレクション(RDBでいうところのテーブル)は、データを挿入すると勝手に作成される。

[shell title=”sourceディレクトリの作成とソースの設置”] $ mkdir ~/mongo_python/source
$ cd ~/mongo_python/source
$ vi mongo.py
[/shell] [python title=”mongo.pyの内容”] # -*- coding: utf-8 -*-

from pymongo import MongoClient

if __name__ == "__main__":

# MongoDBへの接続
mongo_client = MongoClient(‘localhost:27017’)
# データベースの選択
db_connect = mongo_client["db_name"]

# コレクションを指定し、データを挿入する
#db_connect["collection_name"].insert_one({‘x’:1})

[/python]

 

mongo.pyを実行し、データを挿入する。
データが挿入されたかをMongoDBにアクセスして確認する。

[shell] $ python mongo.py

$ mongo
> show databases;
db_name 0.078GB
local 0.078GB
> use db_name
switched to db db_name
> show collections
collection_name
system.indexes
> db["collection_name"].find()
{ "_id" : ObjectId("557b95ffa24587070fe585a1"), "x" : 1 } <- データが挿入されている。
[/shell]

 

複数のデータを挿入する場合は、insert_manyメソッドを利用する。
挿入するデータの生成はリスト内包表記を使用している。

[python title=”データを複数挿入する”] # -*- coding: utf-8 -*-

from pymongo import MongoClient

if __name__ == "__main__":

mongo_client = MongoClient(‘localhost:27017’)
db_connect = mongo_client["db_name"]

# データをたくさん挿入する
db_connect["collection_name"].insert_many([{‘x’:i} for i in range(2,10)])

[/python]

先ほどと同じようにデータが挿入されていることを確認する。

[shell title=”データの確認”] $ mongo
> show databases;
db_name 0.078GB
local 0.078GB
> use db_name
switched to db db_name
> show collections
collection_name
system.indexes
> db["collection_name"].find()
{ "_id" : ObjectId("557b95ffa24587070fe585a1"), "x" : 1 }
{ "_id" : ObjectId("557b9693a24587071f6d1404"), "x" : 2 }
{ "_id" : ObjectId("557b9693a24587071f6d1405"), "x" : 3 }
{ "_id" : ObjectId("557b9693a24587071f6d1406"), "x" : 4 }
{ "_id" : ObjectId("557b9693a24587071f6d1407"), "x" : 5 }
{ "_id" : ObjectId("557b9693a24587071f6d1408"), "x" : 6 }
{ "_id" : ObjectId("557b9693a24587071f6d1409"), "x" : 7 }
{ "_id" : ObjectId("557b9693a24587071f6d140a"), "x" : 8 }
{ "_id" : ObjectId("557b9693a24587071f6d140b"), "x" : 9 }
[/shell]

 

データを取得する

findメソッドを利用してデータを取得する。

[python title=”mongo.pyの内容”] # -*- coding: utf-8 -*-

from pymongo import MongoClient

if __name__ == "__main__":

mongo_client = MongoClient(‘localhost:27017’)
db_connect = mongo_client["db_name"]

# データを取得する
collection_list = db_connect["collection_name"].find()

for x in collection_list:
print(x)

[/python]

実行してデータが取得できたかを確認する。

[shell] $ python mongo.py
{‘_id’: ObjectId(‘557b95ffa24587070fe585a1’), ‘x’: 1}
{‘_id’: ObjectId(‘557b9693a24587071f6d1404’), ‘x’: 2}
{‘_id’: ObjectId(‘557b9693a24587071f6d1405’), ‘x’: 3}
{‘_id’: ObjectId(‘557b9693a24587071f6d1406’), ‘x’: 4}
{‘_id’: ObjectId(‘557b9693a24587071f6d1407’), ‘x’: 5}
{‘_id’: ObjectId(‘557b9693a24587071f6d1408’), ‘x’: 6}
{‘_id’: ObjectId(‘557b9693a24587071f6d1409’), ‘x’: 7}
{‘_id’: ObjectId(‘557b9693a24587071f6d140a’), ‘x’: 8}
{‘_id’: ObjectId(‘557b9693a24587071f6d140b’), ‘x’: 9}
[/shell]

findメソッドの引数に以下のように指定することで条件検索できる。

[python title=”条件検索”] # 条件検索(x==3のものを抽出)
collection_list = db_connect["collection_name"].find({‘x’:3})

# OR検索(x==1 or x==5 のものを抽出)
collection_list = db_connect["collection_name"].find({"$or":[ {"x":1}, {"x":5}]})

# AND検索(x==1 and x==5 のものを抽出)
collection_list = db_connect["collection_name"].find({"$and":[ {"x":1}, {"x":5}]})
[/python]

 

データを変更する

データの変更はreplaceメソッドがある。
まずreplaceメソッドでデータの変更を行う。

[python title=”replaceメソッド”] # -*- coding: utf-8 -*-

from pymongo import MongoClient

if __name__ == "__main__":

mongo_client = MongoClient(‘localhost:27017’)
db_connect = mongo_client["db_name"]

# データを変更する
db_connect["collection_name"].replace_one({‘x’: 1}, {‘x’: 4})

# データを取得する
collection_list = db_connect["collection_name"].find()

for x in collection_list:
print(x)
[/python]

データが変更されたかを確認する。

[shell] $ python mongo.py
{‘_id’: ObjectId(‘557b95ffa24587070fe585a1’), ‘x’: 4}
{‘_id’: ObjectId(‘557b9693a24587071f6d1404’), ‘x’: 2}
{‘_id’: ObjectId(‘557b9693a24587071f6d1405’), ‘x’: 3}
{‘_id’: ObjectId(‘557b9693a24587071f6d1406’), ‘x’: 4}
{‘_id’: ObjectId(‘557b9693a24587071f6d1407’), ‘x’: 5}
{‘_id’: ObjectId(‘557b9693a24587071f6d1408’), ‘x’: 6}
{‘_id’: ObjectId(‘557b9693a24587071f6d1409’), ‘x’: 7}
{‘_id’: ObjectId(‘557b9693a24587071f6d140a’), ‘x’: 8}
{‘_id’: ObjectId(‘557b9693a24587071f6d140b’), ‘x’: 9}
[/shell]

また、update_oneメソッド、update_manyメソッドでも行える。

[python] # -*- coding: utf-8 -*-

from pymongo import MongoClient

if __name__ == "__main__":

mongo_client = MongoClient(‘localhost:27017’)
db_connect = mongo_client["db_name"]

# x==1に該当するデータの4に変更する
db_connect["collection_name"].update_one({‘x’: 1}, {‘$set’: {‘x’: 4}})

# データを取得する
collection_list = db_connect["collection_name"].find()

for x in collection_list:
print(x)

[/python]

変更を確認する。

[shell] $ python mongo.py
{‘_id’: ObjectId(‘557b95ffa24587070fe585a1’), ‘x’: 4}
{‘_id’: ObjectId(‘557b9693a24587071f6d1404’), ‘x’: 2}
{‘_id’: ObjectId(‘557b9693a24587071f6d1405’), ‘x’: 3}
{‘_id’: ObjectId(‘557b9693a24587071f6d1406’), ‘x’: 4}
{‘_id’: ObjectId(‘557b9693a24587071f6d1407’), ‘x’: 5}
{‘_id’: ObjectId(‘557b9693a24587071f6d1408’), ‘x’: 6}
{‘_id’: ObjectId(‘557b9693a24587071f6d1409’), ‘x’: 7}
{‘_id’: ObjectId(‘557b9693a24587071f6d140a’), ‘x’: 8}
{‘_id’: ObjectId(‘557b9693a24587071f6d140b’), ‘x’: 9}
[/shell]

また、update_oneメソッド、update_manyメソッドは変わったデータの更新が行える。
一例として、上の例で $set にしたところを $inc に変えることでデータの加算が行える。

[python] # -*- coding: utf-8 -*-

from pymongo import MongoClient

if __name__ == "__main__":

mongo_client = MongoClient(‘localhost:27017’)
db_connect = mongo_client["db_name"]

# x==2に該当するすべてのデータのxに100加算する
db_connect["collection_name"].update_many({‘x’: 4}, {‘$inc’: {‘x’: 100}})

# データを取得する
collection_list = db_connect["collection_name"].find()

for x in collection_list:
print(x)

[/python]

x==4だったところが100加算されていることがわかる。

[shell] $ python mongo.py
{‘x’: 104, ‘_id’: ObjectId(‘557b95ffa24587070fe585a1’)}
{‘x’: 2, ‘_id’: ObjectId(‘557b9693a24587071f6d1404’)}
{‘x’: 3, ‘_id’: ObjectId(‘557b9693a24587071f6d1405’)}
{‘x’: 104, ‘_id’: ObjectId(‘557b9693a24587071f6d1406’)}
{‘x’: 5, ‘_id’: ObjectId(‘557b9693a24587071f6d1407’)}
{‘x’: 6, ‘_id’: ObjectId(‘557b9693a24587071f6d1408’)}
{‘x’: 7, ‘_id’: ObjectId(‘557b9693a24587071f6d1409’)}
{‘x’: 8, ‘_id’: ObjectId(‘557b9693a24587071f6d140a’)}
{‘x’: 9, ‘_id’: ObjectId(‘557b9693a24587071f6d140b’)}
[/shell]

 

データを消去する

delete_oneメソッド、delete_manyメソッドを利用することでデータの削除が行える。

[python title=”mongo.pyの内容”] # -*- coding: utf-8 -*-

from pymongo import MongoClient

if __name__ == "__main__":

mongo_client = MongoClient(‘localhost:27017’)
db_connect = mongo_client["db_name"]

# x==3に該当するデータを消去する
# db_connect["collection_name"].delete_one({‘x’: 3})

# データを取得する
collection_list = db_connect["collection_name"].find()

for x in collection_list:
print(x)

[/python]

データが一つ削除されたことを確認する。

[shell] $ python mongo.py
{‘x’: 104, ‘_id’: ObjectId(‘557b95ffa24587070fe585a1’)}
{‘x’: 2, ‘_id’: ObjectId(‘557b9693a24587071f6d1404’)}
{‘x’: 104, ‘_id’: ObjectId(‘557b9693a24587071f6d1406’)}
{‘x’: 5, ‘_id’: ObjectId(‘557b9693a24587071f6d1407’)}
{‘x’: 6, ‘_id’: ObjectId(‘557b9693a24587071f6d1408’)}
{‘x’: 7, ‘_id’: ObjectId(‘557b9693a24587071f6d1409’)}
{‘x’: 8, ‘_id’: ObjectId(‘557b9693a24587071f6d140a’)}
{‘x’: 9, ‘_id’: ObjectId(‘557b9693a24587071f6d140b’)}
[/shell]

複数のデータも削除してみる。

[python title=”mongo.pyの内容”] # -*- coding: utf-8 -*-

from pymongo import MongoClient

if __name__ == "__main__":

mongo_client = MongoClient(‘localhost:27017’)
db_connect = mongo_client["db_name"]

# x==104に該当するデータを複数消去する
db_connect["collection_name"].delete_many({‘x’: 104})

# データを取得する
collection_list = db_connect["collection_name"].find()

for x in collection_list:
print(x)
[/python]

x==104のデータがすべて削除されていることがわかる。

[shell title=”データ削除の確認”] $ python mongo.py
{‘_id’: ObjectId(‘557b9693a24587071f6d1404’), ‘x’: 12}
{‘_id’: ObjectId(‘557b9693a24587071f6d1407’), ‘x’: 5}
{‘_id’: ObjectId(‘557b9693a24587071f6d1408’), ‘x’: 6}
{‘_id’: ObjectId(‘557b9693a24587071f6d1409’), ‘x’: 7}
{‘_id’: ObjectId(‘557b9693a24587071f6d140a’), ‘x’: 8}
{‘_id’: ObjectId(‘557b9693a24587071f6d140b’), ‘x’: 9}
[/shell]

 

Related posts

コメントを残す