这是一个非常有趣的问题......我正在编写一个程序来通过 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 的回答非常酷!