Pythonデータの永続性-PyMongoモジュール
MongoDBはドキュメント指向です NoSQLデータベース。これは、サーバー側のパブリックライセンスの下で配布されるクロスプラットフォームデータベースです。スキーマとしてJSONのようなドキュメントを使用します。
巨大なデータを格納する機能を提供するために、複数の物理サーバー(シャードと呼ばれる)が相互接続され、水平方向のスケーラビリティが実現されます。MongoDBデータベースはドキュメントで構成されています。
ドキュメントは、リレーショナルデータベースのテーブルの行に類似しています。ただし、特定のスキーマはありません。ドキュメントは、キーと値のペアのコレクションです-辞書に似ています。ただし、各ドキュメントのkvペアの数は異なる場合があります。リレーショナルデータベースのテーブルに主キーがあるのと同じように、MongoDBデータベースのドキュメントにも次のような特別なキーがあります。"_id"。
MongoDBデータベースがPythonでどのように使用されるかを見る前に、MongoDBをインストールして起動する方法を簡単に理解しましょう。MongoDBのコミュニティバージョンと商用バージョンが利用可能です。コミュニティバージョンは、www.mongodb.com / download -center / communityからダウンロードできます。
MongoDBがc:\ mongodbにインストールされているとすると、次のコマンドを使用してサーバーを呼び出すことができます。
c:\mongodb\bin>mongod
MongoDBサーバーは、デフォルトでポート番号22017でアクティブになっています。データベースはデフォルトでdata / binフォルダーに保管されますが、場所は–dbpathオプションで変更できます。
MongoDBには、MongoDBシェルで使用される独自のコマンドセットがあります。シェルを呼び出すには、Mongo コマンド。
x:\mongodb\bin>mongo
MySQLまたはSQLiteシェルプロンプトと同様のシェルプロンプトが表示され、その前にネイティブNoSQLコマンドを実行できます。ただし、MongoDBデータベースをPythonに接続することに関心があります。
PyMongoモジュールは、Pythonプログラミングインターフェイスを提供するためにMongoDBInc自体によって開発されました。よく知られているpipユーティリティを使用してPyMongoをインストールします。
pip3 install pymongo
MongoDBサーバーが稼働していると仮定します( mongod コマンド)そしてポート22017でリッスンしている場合、最初に宣言する必要があります MongoClientオブジェクト。Pythonセッションとデータベース間のすべてのトランザクションを制御します。
from pymongo import MongoClient
client=MongoClient()
このクライアントオブジェクトを使用して、MongoDBサーバーとの接続を確立します。
client = MongoClient('localhost', 27017)
次のコマンドで新しいデータベースが作成されます。
db=client.newdb
MongoDBデータベースには、リレーショナルデータベースのテーブルと同様に、多くのコレクションを含めることができます。コレクションオブジェクトはによって作成されますCreate_collection() 関数。
db.create_collection('students')
これで、次のようにコレクションに1つ以上のドキュメントを追加できます-
from pymongo import MongoClient
client=MongoClient()
db=client.newdb
db.create_collection("students")
student=db['students']
studentlist=[{'studentID':1,'Name':'Juhi','age':20, 'marks'=100},
{'studentID':2,'Name':'dilip','age':20, 'marks'=110},
{'studentID':3,'Name':'jeevan','age':24, 'marks'=145}]
student.insert_many(studentlist)
client.close()
ドキュメントを取得するには(SELECTクエリと同様)、次を使用する必要があります find()方法。すべてのドキュメントを取得できるカーソルを返します。
students=db['students']
docs=students.find()
for doc in docs:
print (doc['Name'], doc['age'], doc['marks'] )
コレクション内のすべてのドキュメントではなく特定のドキュメントを検索するには、find()メソッドにフィルターを適用する必要があります。フィルタは論理演算子を使用します。MongoDBには、以下のような独自の論理演算子のセットがあります。
シニア番号 | MongoDB演算子と従来の論理演算子 |
---|---|
1 | $eq 等しい(==) |
2 | $gt 大なり記号(>) |
3 | $gte 以上(> =) |
4 | $in 配列内の任意の値と等しい場合 |
5 | $lt 未満(<) |
6 | $lte 以下(<=) |
7 | $ne (!=)と等しくない |
8 | $nin 配列のどの値とも等しくない場合 |
たとえば、21歳以上の学生のリストを取得することに関心があります。のフィルターで$ gt演算子を使用するfind() 次のような方法-
students=db['students']
docs=students.find({'age':{'$gt':21}})
for doc in docs:
print (doc.get('Name'), doc.get('age'), doc.get('marks'))
PyMongoモジュールは提供します update_one() そして update_many() 特定のフィルター式を満たす1つのドキュメントまたは複数のドキュメントを変更するためのメソッド。
名前がJuhiであるドキュメントのmarks属性を更新しましょう。
from pymongo import MongoClient
client=MongoClient()
db=client.newdb
doc=db.students.find_one({'Name': 'Juhi'})
db['students'].update_one({'Name': 'Juhi'},{"$set":{'marks':150}})
client.close()