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

Share on Facebook
Pocket
LINEで送る
Bookmark this on Google Bookmarks

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

前提

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

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

 

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

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

$ pyvenv  ~/mongo_python
$ source ~/mongo_python/bin/activate
(mongo_python)$ pip install --upgrade pymongo
(mongo_python)$ pip install pymongo

 

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

 

データを挿入する

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

$ mkdir ~/mongo_python/source
$ cd ~/mongo_python/source
$ vi 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})

 

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

$ 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 } <- データが挿入されている。

 

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

# -*- 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)])

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

$ 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 }

 

データを取得する

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

# -*- 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 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}

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

    # 条件検索(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}]})

 

データを変更する

データの変更はreplaceメソッドがある。
まず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 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}

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

# -*- 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 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}

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

# -*- 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)

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

$ 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')}

 

データを消去する

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

# -*- 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 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')}

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

# -*- 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)

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

$ 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}

 

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です