本記事では、SQLAlchemy を使用して OceanBase データベースに接続し、テーブルの作成、データの挿入、更新、クエリなどの基本的なデータベース操作を実装する方法について説明します。
前提条件
- Python 3.xとpipがインストール済みであること。
- OceanBaseデータベースをインストール済みで、MySQLテナントが作成されていること。
手順
- OceanBaseデータベースの接続文字列を取得します。
- SQLAlchemyライブラリをインストールします。
test.pyファイルを作成し、データベース接続情報を入力します。test.pyファイルを実行します。
ステップ1:OceanBaseデータベースの接続文字列を取得する
OceanBaseデータベースのデプロイ担当者または管理者から、該当するデータベース接続文字列を取得します。
obclient -h$host -P$port -u$user_name -p$password -D$database_name
パラメータ説明:
$host:OceanBaseデータベースへの接続IPアドレス。OceanBaseデータベースプロキシ(OceanBase Database Proxy、ODP)接続方式ではODPアドレスを使用し、直接接続方式ではOBServerノードのIPアドレスを使用します。$port:OceanBaseデータベースへの接続ポート。ODP接続方式のデフォルトポートは2883で、ODPデプロイ時にカスタマイズ可能です。直接接続方式のデフォルトポートは2881で、OceanBaseデータベースのデプロイ時にカスタマイズ可能です。$database_name:アクセス対象のデータベース名。注意
テナントに接続するユーザーには、データベースに対する
CREATE、INSERT、UPDATEおよびSELECT権限が付与されていなければなりません。その他のユーザー権限の詳細については、MySQLモードの権限分類を参照してください。$user_name:テナントの接続アカウント。ODP接続の一般的な形式:ユーザー名@テナント名#クラスタ名またはクラスタ名:テナント名:ユーザー名。直接接続方式の形式:ユーザー名@テナント名。$password:アカウントのパスワード。
その他の接続文字列の情報については、OBClientを使用したOceanBaseテナントへの接続を参照してください。
例:
obclient -hxxx.xxx.xxx.xxx -P2881 -utest_user001@mysql001 -p****** -Dtest
ステップ2:SQLAlchemyライブラリをインストールする
SQLAlchemyはPythonで最も広く使われているORM(オブジェクト関係マッピング)ライブラリの一つであり、SQLツールキットとORMシステムを提供し、データベース操作を簡素化できます。SQLAlchemyは、MySQL、PostgreSQL、SQLiteなど、さまざまなデータベースバックエンドをサポートしています。
コマンドプロンプトまたはPowerShellターミナルを開き、以下のコマンドを実行してSQLAlchemyライブラリをインストールします。
pip install sqlalchemy mysqlclient
インストール完了後、以下のコマンドでインストールが成功したかどうか確認できます:
pip list | grep SQLAlchemy
説明
SQLAlchemyは多機能ORMライブラリであり、2つの使用方法を提供しています:CoreとORM。CoreはSQL言語を提供し、ORMはオブジェクト関係マッピング機能を提供します。本記事の例では主にORMの方法を使用しています。
ステップ3:test.pyファイルを作成し、データベース接続情報を入力する
ステップ1:OceanBaseデータベースの接続文字列を取得するに記載されている情報に基づいて、test.py ファイルを作成し、データベース接続情報を入力します。
test.pyという名前のファイルを作成します。test.pyファイルに以下の内容を入力し、実際の状況に応じてデータベース接続情報を修正します。test.pyファイルの内容例は以下のとおりです:from sqlalchemy import create_engine, Column, Integer, String, MetaData, Table from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker # データベース接続情報 DB_USER = 'test_user001@mysql001' DB_PASSWORD = '******' DB_HOST = 'xxx.xxx.xxx.xxx' DB_PORT = 2881 DB_NAME = 'test' # データベース接続URLの作成 DATABASE_URL = f"mysql+mysqldb://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}" # エンジンの作成 engine = create_engine(DATABASE_URL) # 基底クラスの作成 Base = declarative_base() # モデルの定義 class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String(50), nullable=False) age = Column(Integer) def __repr__(self): return f"<User(id={self.id}, name='{self.name}', age={self.age})>" # テーブルの作成 Base.metadata.create_all(engine) # セッションの作成 Session = sessionmaker(bind=engine) session = Session() # データの挿入 new_users = [ User(name='John', age=20), User(name='Lucy', age=25), User(name='Tom', age=30) ] session.add_all(new_users) session.commit() # データの更新 user = session.query(User).filter_by(name='Lucy').first() if user: user.age = 26 session.commit() # データのクエリ users = session.query(User).all() for user in users: print(user) # セッションを閉じる session.close()
ステップ4:test.pyファイルを実行する
コマンドプロンプトまたはPowerShellターミナルを開き、test.py ファイルを実行して、データをクエリし、結果を出力します。
test.pyファイルがあるディレクトリに移動します。例:
cd D:\demo\demotest.pyファイルを実行します。例:
python test.py結果は次のとおりです:
<User(id=1, name='John', age=20)> <User(id=2, name='Lucy', age=26)> <User(id=3, name='Tom', age=30)>
エラー処理
SQLAlchemyを使用してOceanBaseデータベースに接続する際、さまざまなエラーが発生する可能性があります。以下は一般的なエラーとその対処方法です:
接続エラー:データベースに接続できない場合は、ホスト名、ポート、ユーザー名、パスワード、データベース名を含む接続パラメータが正しいかどうか確認してください。
権限エラー:権限に関連するエラーが発生した場合は、ユーザーが必要な操作を実行するための十分な権限を持っていることを確認してください。
SQL構文エラー:SQLステートメントに構文エラーがある場合は、SQLステートメントの構文が正しいかどうか確認してください。
データ型エラー:挿入したデータ型がテーブル定義とマッチしない場合は、挿入したデータ型が正しいことを確認してください。
コード内では、try-except ステートメントを使用してこれらのエラーをキャッチし、処理することで、エラー発生時にプログラムがクラッシュすることなく適切に対処できるようにします。同時に、logging モジュールを使用してエラー情報を記録することで、デバッグや問題の調査を容易にします。
関連ドキュメント
OceanBaseデータベースへの接続方法の詳細については、接続方法の概要を参照してください。
データベース作成の詳細については、CREATE DATABASEを参照してください。