このトピックでは、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への接続に使用するユーザー名とパスワード。パスワードを忘れた場合は、LindormTableのクラスタ管理システムでパスワードを変更できます。 詳細については、ユーザーの管理をご参照ください。
password
lindorm_mysql_addr
MySQL用のLindormTableエンドポイント。 エンドポイントの取得方法の詳細については、エンドポイントを表示するをご参照ください。
重要アプリケーションがECSインスタンスにデプロイされている場合は、セキュリティの向上とネットワークレイテンシの低減のために、VPCを使用してLindormインスタンスに接続することをお勧めします。
アプリケーションがローカルサーバーにデプロイされており、インターネット経由でLindormインスタンスに接続する必要がある場合は、Lindormコンソールで次の手順を実行して、インスタンスのパブリックエンドポイントを有効にできます。左側のナビゲーションペインで、
を選択します。 ワイドテーブルエンジン タブで、パブリックエンドポイントを有効にする をクリックします。アプリケーションがVPC経由でLindormインスタンスに接続する必要がある場合は、このパラメータをMySQL用のLindormTable VPC エンドポイントに設定します。 アプリケーションがインターネット経由でLindormインスタンスに接続する必要がある場合は、このパラメータをMySQL用のLindormTable インターネット エンドポイントに設定します。
database
接続先のデータベースの名前。デフォルトでは、クライアントはdefaultという名前のデータベースに接続されます。
LindormTableに接続して使用します。次のコードブロックは、テーブルを作成し、テーブルにデータを入力する方法の例を示しています。
# Lindormワイドテーブルを作成します。 Base.metadata.create_all(engine) # セッションオブジェクトを作成します。 session = Session() # プレーヤーオブジェクトを作成します。 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()
サンプルコード
次のコードは、SQLAlchemyフレームワークを使用してLindormTableに接続し、使用する方法の完全な例を示しています。
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()
# プレーヤーオブジェクトを定義します。
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)
# Lindormワイドテーブルを作成します。
Base.metadata.create_all(engine)
# セッションオブジェクトを作成します。
session = Session()
# プレーヤーオブジェクトを作成します。
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']