gpt4 book ai didi

python - 如何在多个数据库和模式上重复使用 sqlalchemy ORM 模型?

转载 作者:行者123 更新时间:2023-12-01 06:14:31 24 4
gpt4 key购买 nike

我有一个 SQLAlchemy ORM 模型,目前看起来有点像这样:

Base = declarative_base()

class Database(Base):

__tablename__ = "databases"
__table_args__ = (
saschema.PrimaryKeyConstraint('db', 'role'),
{
'schema' : 'defines',
},
)


db = Column(String, nullable=False)
role = Column(String, nullable=False)
server = Column(String)

事情是这样的,实际上这个模型存在于多个数据库中,并且在这些数据库中它将存在于多个模式中。对于任何一项操作,我将仅使用一个(数据库、模式) 元组。

现在,我可以使用以下方法设置数据库引擎:

Session = scoped_session(sessionmaker())
Session.configure(bind=my_db_engine)
# ... do my operations on the model here.

但我不确定如何在执行时更改 __table_args__ 以使架构成为正确的架构。

最佳答案

一种选择是使用 create_engine 将模型绑定(bind)到架构/数据库,而不是在实际数据库中这样做。

#first connect to the database that holds the DB and schema
engine1 = create_engine('mysql://user:pass@db.com/schema1')

Session = session(sessionmaker())
session = Session(bind=engine1)

#fetch the first database
database = session.query(Database).first()

engine2 = create_engine('mysql://user:pass@%s/%s' % (database.DB, database.schema))
session2 = Session(bind=engine2)

我不知道这是否理想,但这是实现这一目标的一种方法。如果您事先缓存了数据库列表,那么在大多数情况下您只需创建一个 session 。

关于python - 如何在多个数据库和模式上重复使用 sqlalchemy ORM 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4037192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com