これは非常に興味深い質問です... SQLAlchemy を介して同じスキーマを持つ複数のリモート データベースを操作するプログラムを作成しています。接続文字列は静的ではありません。ローカルの SQLite データベースに格納されています。実行時にセッションを作成し、そのセッションを使用してデータベース スキーマを反映する必要があります。すべてのデータベースは同じスキーマを持っています。私はすでにテーブル名を知っています。とにかくこれを実装するには?
def connect(connstr):
engine = create_engine(connstr)
metadata = MetaData(bind=engine)
session = create_session(bind=engine)
return session
class User(Base):
# How it's possible to create a dummy model class without predefined metadata?
__table__ = Table('users', metadata, autoload=True)
編集:最後に、私はこの問題を自分で解決しました:
Base = declarative_base()
def connect(connstr):
engine = create_engine(connstr)
metadata = MetaData(bind=engine)
session = create_session(bind=engine)
return metadata, session
def get_model(metadata, modelname, tablename):
cls = type(modelname, (Base,), dict(
__table__ = Table(tablename, metadata, autoload = True)
))
return cls
しかし、@Gary van der Merweの答えはかなりクールです!