このトピックでは、mysqlclient と OceanBase Database を使用して、テーブルの作成、データの挿入、データのクエリなどの基本的なデータベース操作を実行するアプリケーションを構築する方法について説明します。
python-mysqlclient サンプルプロジェクトをダウンロードする
前提条件
Python 3.x と pip がインストールされていること。
OceanBase Database をインストールし、MySQL テナントを作成していること。
手順
Python と pip のバージョンを確認します。
mysqlclient ライブラリをインストールします。
OceanBase Database の接続情報を取得します。
config.pyファイル内のデータベース接続情報を変更します。main.pyファイルを実行します。CLI でデータベース操作を実行します。
ステップ 1:Python と pip のバージョンを確認する
コマンドプロンプトまたは PowerShell ターミナルを開き、python --version コマンドと pip --version コマンドを実行して、Python と pip が正しくインストールされているかどうかを確認します。
例:
PS C:\Windows\system32> python --version
Python 3.11.2
PS C:\Windows\system32> pip --version
pip 23.3.1 from C:\Users\xxx\AppData\Local\Programs\Python\Python311\Lib\site-packages\pip (python 3.11)ステップ 2:mysqlclient ライブラリをインストールする
mysqlclient ライブラリをインストールする際には、OceanBase Database に接続するために MySQL C API をコンパイルおよびリンクする必要があります。そのため、後でコンパイルするために MySQL Connector C または MySQL C API の開発ファイルをインストールする必要があります。
Windows
方法 1:プリコンパイル済みバイナリファイルを使用して mysqlclient ライブラリをインストールする
Windows 環境では、プリコンパイル済みバイナリファイルを使用して mysqlclient ライブラリをインストールできます。ダウンロードファイル から、Python のバージョンとオペレーティングシステムに互換性のある whl ファイルをダウンロードし、pip install コマンドを使用してインストールします。
例:
コマンドプロンプトまたは PowerShell ターミナルを開き、次のコマンドを実行して必要な Python ライブラリをインストールします。
whlファイルが保存されているディレクトリに移動します。cd D:\download次のコマンドを実行して mysqlclient ライブラリをインストールします。
PS D:\download> pip install mysqlclient-2.2.0-cp311-cp311-win_amd64.whl Processing d:\download\mysqlclient-2.2.0-cp311-cp311-win_amd64.whl Installing collected packages: mysqlclient Successfully installed mysqlclient-2.2.0
方法 2:mysqlclient ライブラリを直接インストールする
MySQL をインストールします。
mysqlclient を使用するには、MySQL データベースサーバーをインストールする必要があります。 mysqlclient ライブラリは、MySQL と通信するために MySQL クライアントプログラムとライブラリファイルに依存しています。 MySQL Community Downloads ページからインストーラーをダウンロードし、手順に従ってインストールします。
C コンパイラをインストールします。
Windows 環境では、C コンパイラとして Visual Studio または MinGW をインストールすることを選択できます。
開発ツールをインストールします。
Windows 環境では、MySQL Connector/C を使用して MySQL 開発ライブラリを取得できます。 MySQL Connector/C をインストールするには、次の手順を実行します。
MySQL Community Downloads ページに移動します。
オペレーティングシステムに適したインストールパッケージをダウンロードします。
ダウンロードしたインストールパッケージを実行し、インストールウィザードの手順に従ってインストールします。
インストール中に、[カスタム] インストールタイプを選択し、[開発コンポーネント] がインストールされていることを確認します。
インストールが完了したら、コンピュータを再起動します。
mysqlclient ライブラリをインストールします。
コマンドプロンプトまたは PowerShell ターミナルを開き、次のコマンドを実行して必要な Python ライブラリをインストールします。
次のコマンドを実行して
python-mysqlclientディレクトリに移動します。cd python-mysqlclient次のコマンドを実行して mysqlclient ライブラリをインストールします。
pip install -r requirements.txtB
説明pip install mysqlclientコマンドを直接実行して mysqlclient ライブラリをインストールすることもできます。
Linux
Linux では、Python C 拡張機能は Python.h ヘッダーファイルに依存しており、これは通常 python3-devel パッケージに含まれています。 python3-devel パッケージがインストールされていない場合、MySQL C API をコンパイルするときにエラーが返され、Python.h ヘッダーファイルが見つからないことが示されます。
コマンドプロンプトまたは PowerShell ターミナルを開き、次のコマンドを実行して必要な Python ライブラリをインストールします。
python3-develパッケージがインストールされているかどうかを確認します。次のコマンドを実行して
python3-develパッケージがインストールされているかどうかを確認します。rpm -q python3-develパッケージがインストールされている場合は、次の情報が表示されます。
python3-devel-3.x.x-x.el7.x86_64ここで、3.x.x は Python3 のバージョンを示し、x86_64 はシステムの CPU アーキテクチャを示します。
パッケージがインストールされていない場合は、次の情報が表示されます。
package python3-devel is not installedこの場合は、次のコマンドを実行して
python3-develパッケージをインストールできます。sudo yum install python3-develインストールが完了したら、
rpm -q python3-develコマンドを再度実行して、インストールが成功したかどうかを確認します。
mysqlclient ライブラリをインストールします。
次のコマンドを実行して
python-mysqlclientプロジェクトディレクトリに移動します。cd python-mysqlclient次のコマンドを実行して mysqlclient ライブラリをインストールします。
sudo pip install -r requirements.txt
説明sudo pip install mysqlclientコマンドを直接実行して mysqlclient ライブラリをインストールすることもできます。
ステップ 3:OceanBase Database の接続情報を取得する
OceanBase Database のデプロイエンジニアまたは管理者に連絡して、データベース接続文字列を取得します。
obclient -h$host -P$port -u$user_name -p$password -D$database_nameパラメーターの説明:
$host: OceanBase Database に接続するための IP アドレスです。$port:OceanBase Database に接続するためのポート。MySQL モードのデフォルトポートは 3306 です。$database_name:アクセスするデータベースの名前。$user_name:テナントアカウントのユーザー名。$password:テナントアカウントのパスワード。
接続文字列の詳細については、「接続パラメーターを取得する」をご参照ください。
例:
obclient -hxxx.xxx.xxx.xxx -P3306 -utest_user001 -p****** -Dtestステップ 4: config.py ファイル内のデータベース接続情報を変更する
ステップ 3:OceanBase Database の接続情報を取得する で取得した情報に基づいて、python-mysqlclient/config.py ファイル内のデータベース接続情報を変更します。
python-mysqlclientプロジェクトディレクトリに移動します。config.pyファイル内のデータベース接続情報を変更します。Windows 環境では、テキストエディタを使用して
config.pyファイルを開き、実際の状況に基づいてデータベース接続情報を変更します。Linux 環境では、
vi config.pyコマンドまたはvim config.pyコマンドを使用してconfig.pyファイルを開き、実際の状況に基づいてデータベース接続情報を変更します。
次の例は、
config.pyconfig.pyOCEANBASE_CONFIG = { 'host': 'xxx.xxx.xxx.xxx', 'port': 3306, 'user': 'test_user001', 'password': '******', 'database': 'test', 'charset': 'utf8mb4' }
ステップ 5: main.py ファイルを実行する
コマンドプロンプトまたは PowerShell ターミナルを開き、python main.py コマンドを実行してプログラムを起動します。
python-mysqlclientプロジェクトディレクトリに移動します。cd /home/admin/python-mysqlclient次のコマンドを実行して
main.pyプログラムを起動します。python main.py戻り値は次のとおりです。
Table created successfully Instruction: 1.Insert Data; 2.Query Data; 3.Exit. Enter the command [1/2/3]>
ステップ 6:CLI でデータベース操作を実行する
例:データを正常に挿入する
CLI で
1と入力し、Enter キーを押します。例:
Enter the command [1/2/3]> 1Enter name:プロンプトが表示されたら、名前を入力して Enter キーを押します。例:
Enter name: A1Enter age:プロンプトが表示されたら、年齢を入力して Enter キーを押します。例:
Enter age: 18Record inserted successfullyメッセージが表示され、データが正常に挿入されたことを示します。最後に、命令が表示され、1、2、または3を入力して Enter キーを押し、対応する操作を実行するように求められます。例:
Record inserted successfully Instruction: 1.Insert Data; 2.Query Data; 3.Exit. Enter the command [1/2/3]>
例:データの挿入に失敗する
CLI で
1と入力し、Enter キーを押します。例:
Enter the command [1/2/3]> 1Enter name:プロンプトが表示されたら、名前を入力して Enter キーを押します。例:
Enter name: A2Enter age:プロンプトが表示されたら、年齢を入力して Enter キーを押します。説明年齢フィールドのデータ型は INT です。
例:
Enter age: 18文字列(1366, 'Incorrect integer value')メッセージが表示され、データの挿入に失敗したことを示します。最後に、命令が表示され、1、2、または3を入力して Enter キーを押し、対応する操作を実行するように求められます。例:
(1366, 'Incorrect integer value') Instruction: 1.Insert Data; 2.Query Data; 3.Exit. Enter the command [1/2/3]>
例:データをクエリする
CLI で
2と入力し、Enter キーを押します。例:
Enter the command [1/2/3]> 2テーブルのデータが表示されます。最後に、命令が表示され、
1、2、または3を入力して Enter キーを押し、対応する操作を実行するように求められます。例:
(1, 'A1', 18) Instruction: 1.Insert Data; 2.Query Data; 3.Exit. Enter the command [1/2/3]>
例:無効なコマンドを入力する
CLI で
1/2/3以外の値を入力し、Enter キーを押します。例:
Enter the command [1/2/3]> A次のエラーメッセージが表示されます:
Invalid command, please enter command again [1/2/3]。最後に、命令が表示され、1、2、または3を入力して Enter キーを押し、対応する操作を実行するように求められます。例:
Invalid command, please enter command again [1/2/3] Instruction: 1.Insert Data; 2.Query Data; 3.Exit. Enter the command [1/2/3]>
例:プログラムを終了する
CLI で
3と入力し、Enter キーを押します。例:
Enter the command [1/2/3]> 3
プロジェクトコードの紹介
python-mysqlclient をクリックしてプロジェクトコードをダウンロードします。これは python-mysqlclient.zip という名前の圧縮ファイルです。
解凍すると、python-mysqlclient という名前のフォルダがあります。ディレクトリ構造は次のとおりです。
python-mysqlclient
├── config.py
├── db.py
├── main.py
└── requirements.txtファイルとディレクトリの概要:
config.py:データベース接続構成を管理します。db.py:テーブルの作成、データの挿入、データのクエリなど、データベースを操作します。main.py:アプリケーションのエントリポイントであり、シンプルな CLI を提供します。CLI にコマンドを入力して対応する操作を実行できます。requirements.txt:プロジェクトに必要な Python ライブラリとそのバージョン要件をリストします。説明このトピックで提供されているコードは、mysqlclient ライブラリのバージョン要件のみをリストしています。
pip install -r requirements.txtコマンドを実行して、必要なライブラリを自動的にインストールできます。
config.py のコード
Python を使用してデータベースに接続する場合、データベース接続パラメーターを指定する必要があります。これらのパラメーターは、config.py ファイルなどの別の構成ファイルに配置できます。パラメーターを辞書にカプセル化することで、他の Python ファイルがパラメーターを各ファイルに書き込むことなく、辞書を参照してデータベースに接続できます。
このトピックで説明されている config.py ファイルのコードは、OCEANBASE_CONFIG という名前の辞書変数を定義しており、これは OceanBase Database の接続パラメーターを管理するために使用されます。
サンプルコード:
OCEANBASE_CONFIG = {
'host': 'localhost',
'port': port,
'user': 'user_name',
'password': '',
'database': 'db_name',
'charset': 'utf8mb4'
}パラメーターの説明:
host: OceanBase Database に接続するための IP アドレス。port:OceanBase Database に接続するためのポート。デフォルトポートは 3306 です。user:テナントアカウントのユーザー名。password:テナントアカウントのパスワード。database:接続するデータベースの名前。charset:データベースに接続するための文字セット。
プロジェクトの要件とデータベース設定に基づいて、サンプルコードのパラメーター値を変更する必要があります。
db.py のコード
db.py ファイルは、データベース操作がカプセル化されている Python モジュールです。これを使用して、データベース内のデータの追加、削除、変更、およびクエリを実行できます。
db.py ファイルを構成するには、次の手順を実行します。
MySQLdb モジュールとデータベース接続パラメーターをインポートします。
サンプルコード:
import MySQLdb from config import OCEANBASE_CONFIGテーブルを作成するための関数を定義します。
create_table関数を定義して、OceanBase Database にtest_tbl1という名前のテーブルを作成します。withステートメントを使用して、データベース接続とカーソルオブジェクトのライフサイクルを管理します。これにより、メモリリークなしにデータベース接続とカーソルオブジェクトを安全に閉じることができます。SQL ステートメントを定義し、ステートメントを実行し、実行結果またはエラーメッセージを出力します。サンプルコード:
def create_table(): with MySQLdb.connect(**OCEANBASE_CONFIG) as conn: with conn.cursor() as cursor: try: create_table_sql = """ CREATE TABLE test_tbl1 ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, age INT UNSIGNED NOT NULL, PRIMARY KEY (id) ) ENGINE=OCEANBASE AUTO_INCREMENT=1 """ cursor.execute(create_table_sql) print("Table created successfully") except MySQLdb.Error as err: print(err)データ挿入用の関数を定義します。
insert_record関数を定義して、指定されたテーブルにレコードを挿入します。レコードには、nameフィールドとageフィールドが含まれています。withステートメントを使用して、データベース接続とカーソルオブジェクトのライフサイクルを管理します。これにより、メモリリークなしにデータベース接続とカーソルオブジェクトを安全に閉じることができます。SQL ステートメントを定義し、ステートメントを実行し、トランザクションをコミットし、実行結果またはエラーメッセージを出力します。サンプルコード:
def insert_record(table_name, name, age): with MySQLdb.connect(**OCEANBASE_CONFIG) as conn: with conn.cursor() as cursor: try: insert_sql = f"INSERT INTO {table_name} (name, age) VALUES (%s, %s)" cursor.execute(insert_sql, (name, age)) conn.commit() print("Record inserted successfully") except MySQLdb.Error as err: print(err)テーブルデータをクエリするための関数を定義します。
select_all関数を定義して、指定されたテーブル内のすべてのレコードをクエリします。withステートメントを使用して、データベース接続とカーソルオブジェクトのライフサイクルを管理します。これにより、メモリリークなしにデータベース接続とカーソルオブジェクトを安全に閉じることができます。SQL ステートメントを定義し、ステートメントを実行し、クエリ結果を走査し、すべてのレコードを出力します。エラーが発生した場合は、エラーをキャプチャしてエラーメッセージを出力します。サンプルコード:
def select_all(table_name): with MySQLdb.connect(**OCEANBASE_CONFIG) as conn: with conn.cursor() as cursor: try: select_sql = f"SELECT * FROM {table_name}" cursor.execute(select_sql) result = cursor.fetchall() for row in result: print(row) except MySQLdb.Error as err: print(err)
main.py のコード
このトピックの main.py ファイルは、Python と MySQLdb を使用してデータベースを操作する方法を示しています。このファイルは、データベース操作を実行するためのコマンドを実行できる CLI を提供します。このプログラムを使用して、テーブルの作成、レコードの挿入、すべてのレコードのクエリなどの基本的なデータベース操作を実装できます。
main.py ファイルを構成するには、次の手順を実行します。
db.pyファイルで定義されている関数をインポートします。db モジュールから
create_table関数、insert_record関数、およびselect_all関数をインポートします。サンプルコード:
from db import create_table, insert_record, select_allデータベースを操作するための関数を定義します。
main関数を定義して、データベース操作用のシンプルな CLI プログラムを実装します。プログラムはcreate_table関数を呼び出してtest_tbl1という名前のテーブルを作成し、whileループに入ってコマンドの入力を待ちます。プログラムは、3コマンドを入力してプログラムを終了するまで、コマンドに基づいて対応する関数を呼び出してデータの挿入またはクエリを実行します。無効なコマンドを入力した場合、プログラムはコマンドの再入力を求めます。入力されたコマンドに応じて、プログラムはデータ挿入(コマンド 1)、データクエリ(コマンド 2)、プログラム終了(コマンド 3)などのさまざまな操作を実行します。
サンプルコード:
def main(): create_table() while True: print("Instruction: 1.Insert Data; 2.Query Data; 3.Exit.") command = input("Enter the command [1/2/3]> ") if command == "1": name = input("Enter name:") age = input("Enter age:") insert_record("test_tbl1", name, age) elif command == "2": select_all("test_tbl1") elif command == "3": break else: print("Invalid command, please enter command again [1/2/3]")main関数のアプリケーションシナリオを設定します。main関数は、main.pyファイルが直接実行された場合にのみ呼び出されるように指定します。メインモジュールが別のモジュールにインポートされた場合、main関数は呼び出されません。サンプルコード:
if __name__ == "__main__": main()説明この設定により、メインモジュールがインポートされたときに
main関数が自動的に実行されるのを防ぎ、プログラムの再利用性とスケーラビリティを確保できます。
完全なコード例
config.py
OCEANBASE_CONFIG = {
'host': 'localhost',
'port': port,
'user': 'user_name',
'password': '',
'database': 'db_name',
'charset': 'utf8mb4'
}db.py
import MySQLdb
from config import OCEANBASE_CONFIG
# テーブルを作成する関数
def create_table():
with MySQLdb.connect(**OCEANBASE_CONFIG) as conn: # 接続を確立
with conn.cursor() as cursor: # カーソルを取得
try:
create_table_sql = """ # SQLクエリ
CREATE TABLE test_tbl1 (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT UNSIGNED NOT NULL,
PRIMARY KEY (id)
) ENGINE=OCEANBASE AUTO_INCREMENT=1
"""
cursor.execute(create_table_sql) # クエリを実行
print("Table created successfully") # 成功メッセージ
except MySQLdb.Error as err: # エラー処理
print(err)
# レコードを挿入する関数
def insert_record(table_name, name, age):
with MySQLdb.connect(**OCEANBASE_CONFIG) as conn:
with conn.cursor() as cursor:
try:
insert_sql = f"INSERT INTO {table_name} (name, age) VALUES (%s, %s)" # SQLクエリ
cursor.execute(insert_sql, (name, age)) # クエリを実行
conn.commit() # 変更をコミット
print("Record inserted successfully") # 成功メッセージ
except MySQLdb.Error as err: # エラー処理
print(err)
# 全てのレコードを取得する関数
def select_all(table_name):
with MySQLdb.connect(**OCEANBASE_CONFIG) as conn:
with conn.cursor() as cursor:
try:
select_sql = f"SELECT * FROM {table_name}" # SQLクエリ
cursor.execute(select_sql) # クエリを実行
result = cursor.fetchall() # 全ての結果を取得
for row in result: # 結果をループ処理
print(row)
except MySQLdb.Error as err: # エラー処理
print(err)
main.py
from db import create_table, insert_record, select_all # db.py から必要な関数をインポート
def main():
create_table() # テーブルを作成
while True: # 無限ループ
print("Instruction: 1.Insert Data; 2.Query Data; 3.Exit.") # 命令を表示
command = input("Enter the command [1/2/3]> ") # コマンドを入力
if command == "1": # データ挿入
name = input("Enter name:") # 名前を入力
age = input("Enter age:") # 年齢を入力
insert_record("test_tbl1", name, age) # insert_record 関数を呼び出し
elif command == "2": # データクエリ
select_all("test_tbl1") # select_all 関数を呼び出し
elif command == "3": # 終了
break # ループを抜ける
else: # 無効なコマンド
print("Invalid command, please enter command again [1/2/3]") # エラーメッセージ
if __name__ == "__main__": # main.py が直接実行された場合のみ main 関数を実行
main()
関連情報
OceanBase Database への接続方法の詳細については、「概要」をご参照ください。