SqlAlchemy Python 多数据库

Mic*_*ael 13 python 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)
Run Code Online (Sandbox Code Playgroud)

如何修改此声明以能够连接到同一服务器上的多个数据库(例如DATABASE1& DATABASE2)。这似乎指向正确的方向,但不是很清楚,我不确定它是否特定于 Flask:

https://pythonhosted.org/Flask-SQLAlchemy/binds.html

Ale*_*aro 8

添加更多的见解,官方 SQLAlchemy 文档现在比其余答案中提供的策略多了一些策略。

只需看一下以下链接:


div*_*thi 6

嗨,您可以使用以下方法实现此目的。

engines = {
    'drivers':create_engine('postgres://postgres:admin@localhost:5432/Drivers'),
    'dispatch':create_engine('postgres://postgres:admin@localhost:5432/dispatch')
}
Run Code Online (Sandbox Code Playgroud)

我在服务器中有两个数据库和两个表。之后,您可以在进行查询时使用路由类路由特定的数据库连接:

  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']
Run Code Online (Sandbox Code Playgroud)

现在您可以相应地触发查询,例如首先您需要使用如下方式进行会话:

Session = sessionmaker(class_=RoutingSession)
session = Session()
driverssql = session.query(drivers).all()
Run Code Online (Sandbox Code Playgroud)

这是你可以在 sqlalchemy 中使用多个数据库