PyMongoと各種データベースエンジン向けPythonモジュール徹底解説
一般的に開発者は、データのエクスポートやインポート、データベース(DB)統計情報の収集、表領域の監視、ブロックされたセッションやDBロックの確認など、データベース関連タスクの自動化にシェルスクリプトを利用してきました。
概要
Python®はここ7年以上にわたり、最も人気のあるプログラミング言語のひとつとして地位を確立しています。本記事では、さまざまなデータベースエンジンに対応したPythonのDBモジュールを紹介し、さらにPyMongoモジュールを使ってMongoDB®のコレクションに対してデータの照会・挿入を行う具体的な方法を解説します。
Pythonモジュールの紹介
Pythonはオブジェクト指向の高水準プログラミング言語であり、Web開発、データサイエンス、Linux®システム管理など、幅広い分野に対応する豊富なモジュールが提供されています。以下の表は、代表的なデータベースエンジンと、それぞれに対応するPythonモジュールの一覧です。
| データベースエンジン | Pythonモジュール |
|---|---|
| Oracle | cx_oracle |
| PostgreSQL | psycopg2 |
| MongoDB | pymongo |
| MySQL | mysql.connector および pymysql |
| Cassandra | cassandra-driver |
CX_ORACLE
cx_oracleは、OracleデータベースへアクセスするためのPythonモジュールで、Python Database API仕様に準拠しています。Oracle Database 11.2、12c、18c、19c、21cとの互換性があります。
PSYCOPG2
psycopg2は、PostgreSQLデータベースへアクセスするためのPythonモジュールで、こちらもPython Database API仕様に準拠しています。最大の特長は、複数のカーソルを開いて同時に挿入や更新を実行できるマルチスレッドアプリケーションをサポートしている点です。
PYMONGO
pymongoは、MongoDBデータベースへアクセスし、コレクションやドキュメントなどのMongoDBオブジェクトに対してデータベースクエリを実行できるモジュールです。
MYSQL.CONNECTOR
mysql.connectorは、MySQLデータベースへアクセスするためのモジュールで、Python Database API仕様に準拠しています。データベースクエリの実行が可能です。
CASSANDRA-DRIVER
cassandra-driverは、Apache® Cassandra®データベース向けのPythonドライバで、Cassandra Query Language(CQL)と互換性があります。このモジュールを使用することで、Cassandraデータベースへの接続やクエリ実行が可能になります。
PyMongoによる実装デモ
Pythonプログラミングでは、MongoDBに対してCRUD(Create:作成、Read:読み取り、Update:更新、Delete:削除)の各操作を実行できます。以下の手順では、pipのダウンロード、pymongoモジュールのインストール、そしてPyMongoを使ったPythonスクリプトの作成と実行までの流れを示します。
-
Linuxサーバー上で次のコマンドを実行し、Pythonのバージョンを確認します。
# python --version Python 2.7.18 -
次のコマンドでpipとPyMongoをインストールします。
# yum install python-pip # pip install pymongo -
お好みのテキストエディタを開き、MongoDBのコレクションに対してCRUD操作を行う次のPythonスクリプト(mongo-crud.py)を作成します。
#!/usr/bin/python from pymongo import MongoClient client = MongoClient(host = 'localhost:27017', username="dba", password="user123") mongodbinfo = client.server_info() print ("Printing MongoDB Server Information") print (mongodbinfo) print ("##################################################") print ("Mongo DB version") print ("db version:", mongodbinfo["version"]) print ("##################################################") db = client.empdb empdetails = db.employeedetails print ("Existing collection information") printcollection = empdetails.find() for i in printcollection: print (i) print ("##################################################") print ("Adding one document to the collection") details = {"name": "Andy", "designation": "Clerk"} newentry = empdetails.insert_one(details) print (" newentry:", newentry) printcollection1 = empdetails.find() for i in printcollection1: print (i) print ("##################################################") print ("Performing a search on the collection") search = empdetails.find_one({ 'name' : 'Jack'}) print (search) print ("##################################################") print ("Adding multiple documents to the collection") entry1 = {"name": "Cathy", "designation": "Data Operator"} entry2 = {"name": "Susan", "designation": "Operations Manager"} newentries = empdetails.insert_many([entry1, entry2]) printcollection2 = empdetails.find() for i in printcollection2: print (i) -
次のコマンドでPythonスクリプトを実行します。出力結果は下記の画像のようになります。
# python mongo-crud.py
まとめ
Pythonは2020年においても最も注目されているプログラミング言語のひとつであり、非常に幅広い用途に活用できます。データベースエンジニアにとって、Pythonはシェルスクリプトに代わるデータベースタスク自動化の有力な選択肢となるでしょう。
当社のデータベースサービスについて、ぜひ詳しくご覧ください。
ご意見やご質問がある場合は、フィードバックタブからお気軽にお寄せください。また、私たちとの対話も歓迎します。
-
クラスタおよびデータベースバイナリ向けOracle Database 18cグリッド・インフラストラクチャの再リンク完全ガイド
本記事では、再リンク(relink)とは何か、なぜ必要なのか、そしてOracle®オブジェクトファイルを実際にどのように再リンクするのかについて詳しく解説します。 はじめに どのようなプログラミング言語においても、コードをコンパイルしてバイナリ形式のファイル(オブジェクトファイル)を作成する際には、その言語用ライブラリファイル内に定義された事前定義済み関数が必要になります。作成されたオブジェクトファイルは、その後オペレーティングシステム(OS)のライブラリとリンクされ、単一の実行可能ファイルへと統合されます。リンク処理では、各コンポーネントから実行可能ファイルを生成する前に、すべての関数定義を
-
サーバーレス・エッジ時代のグローバルデータベース──Upstash Global Database徹底解説
近年、アプリケーションのデプロイにおいて、サーバーレスアーキテクチャとエッジコンピューティングが急速に普及しています。しかし、サーバーレス関数やエッジ関数の中でアプリケーションの状態やデータを保存するのは、まったく別の話です。データベースへの接続管理、複数拠点からの高速なデータアクセスの実現など、乗り越えるべき課題が数多くあります。サーバーレスアクセスに対応したデータベースサービスは限られており、さらにエッジ関数にも適したものとなると、ごくわずかしか存在しません(詳細な分析はこちらの記事をご覧ください)。Upstashでは、創業当初から低レイテンシかつリクエスト単位の従量課金モデルを採用したサ