SqlAlchemy Python 多个数据库
SqlAlchemy Python multiple databases
我正在使用 SqlAlchemy 访问多个数据库(在同一台服务器上)。我当前的连接字符串如下
connect_string = "mssql+pyodbc://{0}:{1}@{2}/{3}".format(USERNAME_R, PASSWORD_R, SERVER_R, DATABASE_R)
engine = create_engine(connect_string)
session = sessionmaker(bind=engine)()
Record = declarative_base(engine)
如何修改此声明以便能够连接到同一服务器上的多个数据库(例如 DATABASE1
和 DATABASE2
)。这似乎指向了正确的方向,但不是很清楚,我不确定它是否特定于 Flask:
(因为时间关系,手忙脚乱的回答,抱歉。)
不要将引擎绑定到 declarative_base
。仅继承形式 declarative_base()
.
而是在创建会话时将特定引擎传递给 sqlalchemy.orm.sessionmaker
。为不同的引擎创建不同的事务工厂(即 sessionmaker
returns)。在您的查询中,使用 .with_session
绑定到特定会话,从而绑定到特定引擎。
您好,您可以使用 follwing 来实现。
engines = {
'drivers':create_engine('postgres://postgres:admin@localhost:5432/Drivers'),
'dispatch':create_engine('postgres://postgres:admin@localhost:5432/dispatch')
}
我在服务器中有两个数据库和两个 tables.After,您可以在进行查询时使用路由 class 为特定的数据库连接路由:
class RoutingSession(Session):
def get_bind(self, mapper=None, clause=None):
if mapper and issubclass(mapper.class_, drivers):
return engines['drivers']
elif self._flushing:
return engines['dispatch']
现在您可以相应地触发查询,例如,首先您需要像这样创建一个会话:
Session = sessionmaker(class_=RoutingSession)
session = Session()
driverssql = session.query(drivers).all()
这是你可以在 sqlalchemy 中使用多个数据库
为了增加一点洞察力,官方 SQLAlchemy 文档现在比其他答案中提供的策略多了一些策略。
只需看看以下链接:
我正在使用 SqlAlchemy 访问多个数据库(在同一台服务器上)。我当前的连接字符串如下
connect_string = "mssql+pyodbc://{0}:{1}@{2}/{3}".format(USERNAME_R, PASSWORD_R, SERVER_R, DATABASE_R)
engine = create_engine(connect_string)
session = sessionmaker(bind=engine)()
Record = declarative_base(engine)
如何修改此声明以便能够连接到同一服务器上的多个数据库(例如 DATABASE1
和 DATABASE2
)。这似乎指向了正确的方向,但不是很清楚,我不确定它是否特定于 Flask:
(因为时间关系,手忙脚乱的回答,抱歉。)
不要将引擎绑定到 declarative_base
。仅继承形式 declarative_base()
.
而是在创建会话时将特定引擎传递给 sqlalchemy.orm.sessionmaker
。为不同的引擎创建不同的事务工厂(即 sessionmaker
returns)。在您的查询中,使用 .with_session
绑定到特定会话,从而绑定到特定引擎。
您好,您可以使用 follwing 来实现。
engines = {
'drivers':create_engine('postgres://postgres:admin@localhost:5432/Drivers'),
'dispatch':create_engine('postgres://postgres:admin@localhost:5432/dispatch')
}
我在服务器中有两个数据库和两个 tables.After,您可以在进行查询时使用路由 class 为特定的数据库连接路由:
class RoutingSession(Session):
def get_bind(self, mapper=None, clause=None):
if mapper and issubclass(mapper.class_, drivers):
return engines['drivers']
elif self._flushing:
return engines['dispatch']
现在您可以相应地触发查询,例如,首先您需要像这样创建一个会话:
Session = sessionmaker(class_=RoutingSession)
session = Session()
driverssql = session.query(drivers).all()
这是你可以在 sqlalchemy 中使用多个数据库
为了增加一点洞察力,官方 SQLAlchemy 文档现在比其他答案中提供的策略多了一些策略。
只需看看以下链接: