PythonでMongoDBに接続する方法
PythonでMongoDBに接続する手順メモ。
はじめに
最近はPythonばかり使っていて、色々なWebAPI叩いて遊んでます。
公開されているAPIを使うと大量のデータが簡単に手に入るのですが、データ取得⇒MongoDBに格納⇒解析という流れでやってます。
今回はPythonからMongoDBに接続する手順を備忘として記載します。
MongoDB on Docker
まず接続を行うMongoDBを用意する必要がありますが、Dockerでちゃちゃっと用意します。
MongoDBのデータをWebUIで確認できるmongo-expressもあわせて起動するようにしてみます。
version: "3.5" services: mongo: image: mongo:4.0 environment: MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: password ports: - "27017:27017" mongo-express: image: mongo-express ports: - "8081:8081" environment: ME_CONFIG_MONGODB_ADMINUSERNAME: root ME_CONFIG_MONGODB_ADMINPASSWORD: password depends_on: - mongo
docker-composeの定義はこんな感じで、MongoDBは27017
port、mongo-expressは8081
portで接続できるようにします。
データの永続化はしていませんので必要な場合は追加でvolumeを定義します。
Pythonで接続
pymongoのインストール
PythonからMongoDBを使うためにpymongoをインストールします。
$ pipenv install pymongo
※pipでも当然OK
Pythonコード
MongoDBに接続してドキュメントを1件登録するコードを書いてみます。
from pymongo import MongoClient client = MongoClient("mongodb://root:password@192.168.99.100:27017") # DB接続(存在しない場合は作成) db = client["testdb"] # collection接続(存在しない場合は作成) collection = db["test_collection"] # 1件登録 collection.insert_one({"name": "TestA", "age": 100}) client.close()
私の環境ではDocker ToolBoxを使用しているため、clientのホスト名にdocker machinのIPアドレスを指定しています。
Docker Desktopを使用している場合はlocalhost
指定でOKです。
なおDBとcollectionは無い場合作成されるのですが、作成されるタイミングはドキュメントを登録した時となります。insertを行わずに終了した場合は作成されないことに注意してください。
実行コマンドは↓
py mongo_test.py
Mongo-expressで確認
WebUIで確認してみます。上記で定義したdocker-composeで起動していれば合わせてMongo-expressが起動してるはずです。
<docker-machinのIP>:8081
もしくはlocalhost:8081
へアクセスします。
QiitaのAPIで色々やっていたのでそれ用のDBがありますが、、先ほどのtestdbもちゃんとできています。
DB⇒コレクションと辿っていくとドキュメントまで確認することができます。
先ほどInsertしたデータも登録されています。_id
は自動で採番される一意のIDです。
ちなみにこの画面ではデータの編集も可能となっていて、結構便利です(Guiでデータを編集していくというのはあまりないかもしれないですが。。)
おわりに
今回利用したライブラリのpymongoは公式のドキュメントが充実しているので、基本的にはそれに沿って使えば問題ないと思います↓↓