Python を使用して MongoDB データベースにローカル接続する
- MongoDB にデータを保存する
- Python を使用して MongoDB データベースにローカル接続する
- Python でコレクションを作成する
- Python でドキュメントを挿入する
- Python でのクエリ
- Python と MongoDB のインデックス
Python はデータ サイエンスで最も普及しているプログラミング言語であり、柔軟で動的なスキーマを備えた MongoDB は、最新の Web アプリケーション、JSON API、およびデータ プロセッサを作成するための優れた組み合わせです。
MongoDB には、ネイティブの Python ドライバーと、MongoDB と Python がシームレスに連携して機能することを約束するエンジニアのチームも含まれています。
Python は、一般的なデータ操作と処理操作を幅広くサポートしています。 たとえば、Python のネイティブ ディクショナリおよびリスト データ構造は、JSON ドキュメントを処理する際に JavaScript に次ぐものであり、BSON を操作するのに理想的です。
公式の Python MongoDB ドライバー ライブラリである PyMongo も同様にシンプルで、データベース、コレクション、およびドキュメントにアクセスするための直感的な API を提供します。
PyMongo を使用して MongoDB からフェッチされたオブジェクトは、辞書およびリストと互換性があり、簡単な操作、反復、および印刷が可能です。
MongoDB にデータを保存する
MongoDB はデータを JSON のようなドキュメントに格納します。
# Mongodb document (JSON-style)
document_1 = {
"_id": "BF00001CFOOD",
"item_name": "Bread",
"quantity": 2,
"ingredients": "all-purpose flour",
}
Python 辞書は次のようになります。
# python dictionary
dict_1 = {
"item_name": "blender",
"max_discount": "10%",
"batch_number": "RR450020FRG",
"price": 440,
}
Python の前提条件とインストール
マシンに Python をダウンロードしてインストールします。 コマンド ライン ウィンドウにpython
と入力して、インストールが正しいかどうかを確認します。
以下を取得する必要があります。
Python 3.9.1 (tags/v3.9.1:9cf6752, Feb 5 2021, 10:34:40) [MSC v.1927 64 bit (AMD64)] on win32
>>>
Python を初めて使用する場合は、このレッスンの Python MongoDB の例に従うことができます。
Python を使用して MongoDB データベースにローカル接続する
PyMongo は、Python で MongoDB を操作するための一連のライブラリを提供します。 PyMongo を起動して実行するには、コマンド プロンプトを開き、次のように入力します。
python -m pip install pymongo
この Python MongoDB チュートリアルでは、MongoDB SRV URI を使用します。 dnspython
をインストールしましょう:
python -m pip install dnspython
これで、import
ステートメントを使用して、コード内で PyMongo を Python MongoDB ライブラリとして使用できるようになりました。 ただし、最初に Python で MongoDB データベースを作成します。
したがって、Python を接続するための最初のステップは、MongoDB クラスターのセットアップです。
次に、任意のサブディレクトリにある pymongo test insert.py
ファイルに PyMongo コードを記述します。 Textpad/Notepad などの単純なテキスト エディタで十分です。
次の行を MongoDB クライアントに追加します。
def get_database():
from pymongo import MongoClient
import pymongo
# Provide the mongodb url to connect python to mongodb using pymongo
CONNECTION_STRING = (
"mongodb+srv://<username>:<password>@<cluster-name>.mongodb.net/myFirstDatabase"
)
# Create a connection using MongoClient. You can import MongoClient or use pymongo.MongoClient
from pymongo import MongoClient
client = MongoClient(CONNECTION_STRING)
# Create the database for your example
return client["user_shopping_list"]
# This is added so that files can reuse the function get_database()
if __name__ == "__main__":
# Get database
dbname = get_database()
MongoDB データベース接続を取得するには、CONNECTION_STRING
を使用して Mongo クライアントを作成します。 最初にクラスター名、ユーザー名、およびパスワードを変更します。
この Python MongoDB レッスンでは、買い物リストを作成し、いくつかの製品を追加します。 このために user shopping list
というデータベースを作成しましたね。
一方、MongoDB は、コレクションとドキュメントをデータベースに追加するまで、データベースを確立しません。 では、次はコレクションを作ってみましょう。
Python でコレクションを作成する
コレクションを作成するには、コレクション名をデータベースに渡します。 コードを .py
ファイルにコピーするときは、適切なインデントを確認してください。
collection_name = dbname["user_1_items"]
これにより、user_shopping_list
データベースに user_1_items
という名前のコレクションが作成されます。
Python でドキュメントを挿入する
一度に多くのドキュメントを挿入するには、PyMongo insert_many()
メソッドを使用します。
item1 = {
"_id": "U1IT00001",
"item_name": "Blender",
"max_discount": "10%",
"batch_number": "RR450020FRG",
"price": 440,
"category": "kitchen appliance",
}
item2 = {
"_id": "U1IT00002",
"item_name": "Egg",
"category": "food",
"quantity": 12,
"price": 50,
"item_description": "brown country eggs",
}
collection_name.insert_many([item1, item2])
_id
フィールドに言及せずに 3 番目のドキュメントを挿入します。 今回は、日付データ型フィールドを含めます。
Python dateutil
モジュールを使用して、PyMongo に日付を追加します。 ISODate は Mongo シェル関数であるため、Python では機能しません。
python -m pip install python-dateutil
は、パッケージをインストールするコマンドです。 次に、pymongo test.py
に以下を追加します。
from dateutil import parser
expiry_date = "2021-07-13T00:00:00.000Z"
expiry = parser.parse(expiry_date)
item3 = {
"item_name": "Bread",
"quantity": 2,
"ingredients": "all-purpose flour",
"expiry_date": expiry,
}
collection_name.insert_one(item3)
insert one()
メソッドは、単一のドキュメントを挿入するために使用されました。
まず、コマンド ラインを使用して、pymongo test insert.py
を保存した場所に移動します。 次に、Python pymongo test insert.py
コマンドを使用してファイルを実行します。
Python でのクエリ
find()
を使用して、すべてのドキュメントをまとめて表示できます。 そのために、別のファイル pymongo_test_query.py
を作成します。
# Get the database using the method you defined in the pymongo_test_insert file
from pymongo_test_insert import get_database
dbname = get_database()
# Create a new collection
collection_name = dbname["user_1_items"]
item_details = collection_name.find()
for item in item_details:
# This does not give a readable output
print(item)
コマンド ラインを使用して、pymongo test query.py
を保存したフォルダーに移動します。 python pymongo test query.py
コマンドを使用して、プログラムを実行できます。
データは表示可能ですが、形式が理想的ではありません。 印刷するアイテム名とそのカテゴリは次のとおりです。
print(item["item_name"], item["category"])
MongoDB はすべてのデータを受信しますが、3 番目のドキュメントで Python KeyError
が発生します。 pandas を使用して、Python DataFrame で欠落しているデータの問題を処理します。
DataFrame は、データ処理で使用される 2 次元のデータ構造です。 たとえば、Pymongo の discover()
メソッドは、わずか 1 行のコードでデータ フレームに変換できる辞書オブジェクトを返します。
pandas ライブラリを次のようにインストールします。
python -m pip install pandas
for
ループを次のコードに置き換えて、KeyError
を 1 ステップで処理します。
from pandas import DataFrame
# convert the dictionary objects to a data frame
items_dfs = DataFrame(item_details)
print(items_dfs)
print(item['item name'], item['category'])
をコメントアウトすることを忘れないでください。 欠損値については、NaN
と NaT
を使用して誤りを置き換えます。
Python と MongoDB のインデックス
実際のデータベース内のドキュメントとコレクションの数は増え続けています。 大規模なコレクションでは、特定の論文 (たとえば、成分として 万能小麦粉
を含むレコード) を検索するには、長い時間がかかる場合があります。
インデックスを使用すると、データベース検索が高速化、効率化され、コストが削減されます。たとえば、並べ替え、カウント、一致などです。
コレクション レベルで、MongoDB はインデックスを定義します。 コレクションに新しいドキュメントを追加して、インデックスをより論理的にします。
insert many()
メソッドを使用すると、複数のドキュメントを同時に挿入できます。