このトピックでは、Python ORM フレームワークを使用して LindormTable に接続し、使用する方法について説明します。
前提条件
Python 3.7 以降のバージョンがインストールされていること。
LindormTable のバージョンが 2.6.1 以降であること。 LindormTable のバージョンの確認またはアップグレードの詳細については、「LindormTable のリリースノート」および「Lindorm インスタンスのマイナーエンジンバージョンのアップグレード」をご参照ください。
インスタンスで MySQL 互換機能が有効になっていること。 詳細については、「MySQL 互換機能の有効化」をご参照ください。
クライアントの IP アドレスが Lindorm インスタンスのホワイトリストに追加されていること。 詳細については、「ホワイトリストの設定」をご参照ください。
操作手順
次のコマンドを実行して、MySQL データベースへの接続に使用する PyMySQL ライブラリをインストールします。
pip install PyMySQL次のコマンドを実行して、SQLAlchemy フレームワークをインストールします。
pip install SQLAlchemy接続パラメーターを設定します。
engine = create_engine('mysql+pymysql://<user>:<password>@<lindorm_mysql_addr>:33060/<database>', echo=True)パラメーター
パラメーター
説明
user
ユーザーのパスワードを忘れた場合は、LindormTable クラスター管理システムで変更できます。 詳細については、「ユーザーパスワードの変更」をご参照ください。
password
lindorm_mysql_addr
LindormTable の MySQL 互換エンドポイント。 エンドポイントの取得方法の詳細については、「エンドポイントの表示」をご参照ください。
重要アプリケーションが Elastic Compute Service (ECS) インスタンスにデプロイされている場合は、セキュリティの向上とネットワーク遅延の削減のため、VPC を使用して Lindorm インスタンスに接続することを推奨します。
アプリケーションがオンプレミスにデプロイされている場合は、インターネット経由で Lindorm インスタンスに接続する前に、コンソールでパブリックエンドポイントを有効にする必要があります。 パブリックエンドポイントを有効にするには、コンソールで を選択します。 [Wide Table Engine] タブで、[Enable Public Endpoint] をクリックします。
VPC 経由で Lindorm インスタンスに接続する場合は、lindorm_mysql_addr を MySQL 互換の [VPC] エンドポイントに設定します。 インターネット経由で Lindorm インスタンスに接続する場合は、lindorm_mysql_addr を MySQL 互換の [Internet] エンドポイントに設定します。
database
接続先のデータベース名。 デフォルトでは、クライアントは default という名前のデータベースに接続されます。
この例では、LindormTable に接続してテーブルを作成し、データを挿入する方法を示します。
# テーブルを作成します。 Base.metadata.create_all(engine) # セッションオブジェクトを作成します。 session = Session() # Player オブジェクトを作成します。 new_player = Player(player_id = 1001, player_name = "john", player_height = 2.08) # Lindorm にデータを書き込みます。 session.add(new_player) # 複数行のデータを Lindorm に書き込みます。 session.add_all([ Player(player_id=1002, player_name="bob", player_height=1.65), Player(player_id=1003, player_name="smith", player_height=1.82), ]) session.commit()
サンプルコード
完全なサンプルコードを次に示します。
from sqlalchemy import create_engine
from sqlalchemy import Column, String, Integer, Float
from sqlalchemy.orm import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
# Player オブジェクトを定義します。
class Player(Base):
# テーブル名:
__tablename__ = 'player'
# テーブル構造:
player_id = Column(Integer, primary_key=True,autoincrement=False)
player_name = Column(String(255))
player_height = Column(Float)
def __str__(self):
return " ".join(str(item) for item in (self.player_id,self.player_name,self.player_height))
# データベース接続を初期化します。 必要に応じて接続パラメーターを変更してください。
engine = create_engine('mysql+pymysql://user:test@ld-bp1l39h99192d****-proxy-sql-lindorm-public.lindorm.rds.aliyuncs.com:33060/default', echo=True)
Session = sessionmaker(bind=engine)
# テーブルを作成します。
Base.metadata.create_all(engine)
# セッションオブジェクトを作成します。
session = Session()
# Player オブジェクトを作成します。
new_player = Player(player_id = 1001, player_name = "john", player_height = 2.08)
# Lindorm にデータを書き込みます。
session.add(new_player)
# 複数行のデータを Lindorm に書き込みます。
session.add_all([
Player(player_id=1002, player_name="bob", player_height=1.65),
Player(player_id=1003, player_name="smith", player_height=1.82),
])
session.commit()
# player_id が 1001 のデータをクエリします。
rows = session.query(Player).filter(Player.player_id == 1001).all()
print([row.__str__() for row in rows])
# player_id が 1002 のデータを削除します。
session.query(Player).filter(Player.player_id == 1002).delete()
session.commit()
# player_id が 1003 のデータを更新します。
session.query(Player).filter(Player.player_id == 1003).update({"player_name":"brown"})
session.commit()
# すべてのデータをクエリします。
rows = session.query(Player).all()
print([row.__str__() for row in rows])正常に実行されると、次の クエリ結果 が返されます。
['1001 john 2.08']
['1001 john 2.08', '1003 brown 1.82']