このトピックでは、Python ドライバーを使用して OceanBase データベースに接続し、使用する方法について説明します。Python 環境のバージョンごとに異なるドライバーが必要です。Python 3.x では PyMySQL ドライバーが、Python 2.x では MySQL-python ドライバーが必要です。
前提条件
コンピューターに Python ランタイム環境がデプロイされていること。
Python 3.x で OceanBase データベースに接続する
Python 3.x では、OceanBase データベースに接続して使用するために PyMySQL ドライバーが必要です。
手順 1: データベース接続パラメーターを取得する
詳細については、「接続パラメーターを取得する」をご参照ください。例:
$ obclient -hxxx.xxx.xxx.xxx -P3306 -u a**** -p****** -Dtestデータベース接続パラメーターは、データベースへのアクセスに必要な情報を指定します。サンプルコードで使用する前に、データベースにログオンしてデータベース接続パラメーターを確認できます。
オプション:
-h: 接続先の OceanBase データベースのドメイン名。
-P: OceanBase データベースに接続するためのポート。MySQL モードでは、デフォルトでポートは 3306 です。
-u: テナントアカウント。
-p: アカウントパスワード。
-D: データベース名。
手順 2: PyMySQL をインストールする
PyMySQL は、MySQL データベースサーバーに接続するための Python 3.x のライブラリです。PyMySQL は Python Database API Specification 2.0 を実装し、純粋な Python MySQL クライアントライブラリを含んでいます。
PyMySQL の詳細については、PyMySQL の公式 Web サイトおよびAPI リファレンスをご覧ください。
次の 2 つの方法のいずれかを使用して PyMySQL をインストールできます。
CLI でコマンドを実行してインストールする
$ python3 -m pip install PyMySQLソースコードをコンパイルして obcdc をビルドする
ソースコードをクローンします。
$ git clone https://github.com/PyMySQL/PyMySQLPyMySQL ディレクトリに切り替えます。
$ cd PyMySQL/インストール用のコードをコンパイルします。
$ python3 setup.py install
手順 3: サンプルコードを作成する
test.py のサンプルコードを編集します。
#!/usr/bin/python3
import pymysql
conn = pymysql.connect(host="xxx.xxx.xxx.xxx", port=3306,
user="a****", passwd="******", db="test")
cur = conn.cursor()
try:
# Create a table named cities.
sql = 'create table cities (id int, name varchar(24))'
cur.execute(sql)
# Insert two sets of data into the cities table.
sql = "insert into cities values(1,'hangzhou'),(2,'shanghai')"
cur.execute(sql)
# Query all data in the cities table.
sql = 'select * from cities'
cur.execute(sql)
ans = cur.fetchall()
print(ans)
# Drop the cities table.
sql = 'drop table cities'
cur.execute(sql)
finally:
cur.close()
conn.close()コード内のデータベース接続パラメーターを変更します。次のパラメーターを参照してください。パラメーター値は手順 1 で取得します。
user: テナントアカウント。
-uオプションに対応します。password: テナントアカウントのパスワード。
-pオプションに対応します。host: 接続先の OceanBase データベースのドメイン名。
-hオプションに対応します。port: OceanBase データベースに接続するためのポート。
-Pオプションに対応します。MySQL モードでは、デフォルトでポートは 3306 です。db: データベース名。
-Dオプションに対応します。
手順 4: サンプルコードを実行する
コードを編集した後、test.py スクリプトを実行します。
$ python3 test.py次の結果が返された場合、データベースは接続され、サンプル文は正しく実行されています。
((1, 'hangzhou'), (2, 'shanghai'))Python 2.x から OceanBase データベースに接続する
Python 2.x では、OceanBase データベースに接続して使用するために MySQL-python ドライバーが必要です。MySQL-python は、データベースサーバーに接続するための Python 2.x のライブラリです。
手順 1: データベース接続パラメーターを取得する
詳細については、「接続パラメーターを取得する」をご参照ください。例:
$ obclient -hxxx.xxx.xxx.xxx -P3306 -u a**** -p****** -Dtestデータベース接続パラメーターは、データベースへのアクセスに必要な情報を指定します。サンプルコードで使用する前に、データベースにログオンしてデータベース接続パラメーターを確認できます。
オプション:
-h: 接続先の OceanBase データベースのドメイン名。
-P: OceanBase データベースに接続するためのポート。MySQL モードでは、デフォルトでポートは 3306 です。
-u: テナントアカウント。
-p: アカウントパスワード。
-D: データベース名。
手順 2: MySQL-python をインストールする
MySQL-python は、Python アプリケーションを MySQL データベースに接続できるようにする API です。Python Database API Specification 2.0 を実装し、MySQL C API に基づいて構築されています。
MySQL-python の詳細については、MySQL-python の Web サイトおよびGitHubをご覧ください。
yum コマンドを実行して MySQL-python ドライバーをインストールできます。
$ yum install MySQL-python手順 3: サンプルコードを作成する
test2.py のサンプルコードを編集します。
#!/usr/bin/python2
import MySQLdb
conn= MySQLdb.connect(
host='xxx.xxx.xxx.xxx',
port = 3306,
user='a****',
passwd='******',
db ='test'
)
cur = conn.cursor()
try:
# Create a table named cities.
sql = 'create table cities (id int, name varchar(24))'
cur.execute(sql)
# Insert two sets of data into the cities table.
sql = "insert into cities values(1,'hangzhou'),(2,'shanghai')"
cur.execute(sql)
# Query all data in the cities table.
sql = 'select * from cities'
cur.execute(sql)
ans = cur.fetchall()
print(ans)
# Drop the cities table.
sql = 'drop table cities'
cur.execute(sql)
finally:
cur.close()
conn.close()
コード内のデータベース接続パラメーターを変更します。次のパラメーターを参照してください。パラメーター値は手順 1 で取得します。
host: 接続先の OceanBase データベースのドメイン名。
-hオプションに対応します。user: テナントアカウント。
-uオプションに対応します。passwd: テナントアカウントのパスワード。
-pオプションに対応します。port: OceanBase データベースに接続するためのポート。
-Pオプションに対応します。MySQL モードでは、デフォルトでポートは 3306 です。db: データベース名。
-Dオプションに対応します。
手順 4: サンプルコードを実行する
コードを編集した後、test.py スクリプトを実行します。
$ python test.py次の結果が返された場合、データベースは接続され、サンプル文は正しく実行されています。
((1L, 'hangzhou'), (2L, 'shanghai'))