すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB for OceanBase:mysqlclient を使用して OceanBase Database に接続する

最終更新日:Apr 23, 2025

このトピックでは、mysqlclient と OceanBase Database を使用して、テーブルの作成、データの挿入、データのクエリなどの基本的なデータベース操作を実行するアプリケーションを構築する方法について説明します。

python-mysqlclient サンプルプロジェクトをダウンロードする

前提条件

  • Python 3.x と pip がインストールされていること。

  • OceanBase Database をインストールし、MySQL テナントを作成していること。

手順

  1. Python と pip のバージョンを確認します。

  2. mysqlclient ライブラリをインストールします。

  3. OceanBase Database の接続情報を取得します。

  4. config.py ファイル内のデータベース接続情報を変更します。

  5. main.py ファイルを実行します。

  6. 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 ライブラリをインストールします。

  1. whl ファイルが保存されているディレクトリに移動します。

    cd D:\download
  2. 次のコマンドを実行して 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 ライブラリを直接インストールする

  1. MySQL をインストールします。

    mysqlclient を使用するには、MySQL データベースサーバーをインストールする必要があります。 mysqlclient ライブラリは、MySQL と通信するために MySQL クライアントプログラムとライブラリファイルに依存しています。 MySQL Community Downloads ページからインストーラーをダウンロードし、手順に従ってインストールします。

  2. C コンパイラをインストールします。

    Windows 環境では、C コンパイラとして Visual Studio または MinGW をインストールすることを選択できます。

  3. 開発ツールをインストールします。

    Windows 環境では、MySQL Connector/C を使用して MySQL 開発ライブラリを取得できます。 MySQL Connector/C をインストールするには、次の手順を実行します。

    1. MySQL Community Downloads ページに移動します。

    2. オペレーティングシステムに適したインストールパッケージをダウンロードします。

    3. ダウンロードしたインストールパッケージを実行し、インストールウィザードの手順に従ってインストールします。

    4. インストール中に、[カスタム] インストールタイプを選択し、[開発コンポーネント] がインストールされていることを確認します。

    5. インストールが完了したら、コンピュータを再起動します。

  4. mysqlclient ライブラリをインストールします。

    コマンドプロンプトまたは PowerShell ターミナルを開き、次のコマンドを実行して必要な Python ライブラリをインストールします。

    1. 次のコマンドを実行して python-mysqlclient ディレクトリに移動します。

      cd python-mysqlclient
    2. 次のコマンドを実行して 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 ライブラリをインストールします。

  1. 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 コマンドを再度実行して、インストールが成功したかどうかを確認します。

  2. mysqlclient ライブラリをインストールします。

    1. 次のコマンドを実行して python-mysqlclient プロジェクトディレクトリに移動します。

      cd python-mysqlclient
      
    2. 次のコマンドを実行して 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 ファイル内のデータベース接続情報を変更します。

  1. python-mysqlclient プロジェクトディレクトリに移動します。

  2. config.py ファイル内のデータベース接続情報を変更します。

    • Windows 環境では、テキストエディタを使用して config.py ファイルを開き、実際の状況に基づいてデータベース接続情報を変更します。

    • Linux 環境では、vi config.py コマンドまたは vim config.py コマンドを使用して config.py ファイルを開き、実際の状況に基づいてデータベース接続情報を変更します。

    次の例は、config.pyconfig.py

    OCEANBASE_CONFIG = {
     'host': 'xxx.xxx.xxx.xxx',
     'port': 3306,
     'user': 'test_user001',
     'password': '******',
     'database': 'test',
     'charset': 'utf8mb4'
    }

ステップ 5: main.py ファイルを実行する

コマンドプロンプトまたは PowerShell ターミナルを開き、python main.py コマンドを実行してプログラムを起動します。

  1. python-mysqlclient プロジェクトディレクトリに移動します。

    cd /home/admin/python-mysqlclient
  2. 次のコマンドを実行して 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 でデータベース操作を実行する

  • 例:データを正常に挿入する

    1. CLI で 1 と入力し、Enter キーを押します。

      例:

      Enter the command [1/2/3]> 1
    2. Enter name: プロンプトが表示されたら、名前を入力して Enter キーを押します。

      例:

      Enter name: A1
    3. Enter age: プロンプトが表示されたら、年齢を入力して Enter キーを押します。

      例:

      Enter age: 18
    4. Record inserted successfully メッセージが表示され、データが正常に挿入されたことを示します。最後に、命令が表示され、12、または 3 を入力して Enter キーを押し、対応する操作を実行するように求められます。

      例:

      Record inserted successfully
      Instruction: 1.Insert Data; 2.Query Data; 3.Exit.
      Enter the command [1/2/3]>
  • 例:データの挿入に失敗する

    1. CLI で 1 と入力し、Enter キーを押します。

      例:

      Enter the command [1/2/3]> 1
    2. Enter name: プロンプトが表示されたら、名前を入力して Enter キーを押します。

      例:

      Enter name: A2
    3. Enter age: プロンプトが表示されたら、年齢を入力して Enter キーを押します。

      説明

      年齢フィールドのデータ型は INT です。

      例:

      Enter age: 18文字列
    4. (1366, 'Incorrect integer value') メッセージが表示され、データの挿入に失敗したことを示します。最後に、命令が表示され、12、または 3 を入力して Enter キーを押し、対応する操作を実行するように求められます。

      例:

      (1366, 'Incorrect integer value')
      Instruction: 1.Insert Data; 2.Query Data; 3.Exit.
      Enter the command [1/2/3]>
  • 例:データをクエリする

    1. CLI で 2 と入力し、Enter キーを押します。

      例:

      Enter the command [1/2/3]> 2
    2. テーブルのデータが表示されます。最後に、命令が表示され、12、または 3 を入力して Enter キーを押し、対応する操作を実行するように求められます。

      例:

      (1, 'A1', 18)
      Instruction: 1.Insert Data; 2.Query Data; 3.Exit.
      Enter the command [1/2/3]>
  • 例:無効なコマンドを入力する

    1. CLI で 1/2/3 以外の値を入力し、Enter キーを押します。

      例:

      Enter the command [1/2/3]> A
    2. 次のエラーメッセージが表示されます:Invalid command, please enter command again [1/2/3]。最後に、命令が表示され、12、または 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 ファイルを構成するには、次の手順を実行します。

  1. MySQLdb モジュールとデータベース接続パラメーターをインポートします。

    サンプルコード:

    import MySQLdb
    from config import OCEANBASE_CONFIG
  2. テーブルを作成するための関数を定義します。

    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)
  3. データ挿入用の関数を定義します。

    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)
    
  4. テーブルデータをクエリするための関数を定義します。

    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 ファイルを構成するには、次の手順を実行します。

  1. db.py ファイルで定義されている関数をインポートします。

    db モジュールから create_table 関数、insert_record 関数、および select_all 関数をインポートします。

    サンプルコード:

    from db import create_table, insert_record, select_all
    
  2. データベースを操作するための関数を定義します。

    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]")
  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 への接続方法の詳細については、「概要」をご参照ください。