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

Lindorm:Python ORMフレームワークに基づいてアプリケーションを開発する

最終更新日:Mar 24, 2025

このトピックでは、Python ORMフレームワークを使用してLindormTableに接続し、使用する方法について説明します。

前提条件

手順

  1. 次のコマンドを実行して、MySQLデータベースへの接続に使用するPyMySQLライブラリをインストールします。

    pip install PyMySQL
  2. 次のコマンドを実行して、SQLAlchemyフレームワークをインストールします。

    pip install SQLAlchemy
  3. 接続パラメータを構成します。

    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という名前のデータベースに接続されます。

  4. 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']