Python中SQLAlchemy如何同时连接多个数据库?
比如,同一个 App 要分别连 MySQL 和 mongoDB,或同时连 MySQL 和 redis。
Python中SQLAlchemy如何同时连接多个数据库?
3 回复
在SQLAlchemy里同时连多个数据库,最直接的方法就是创建多个Engine实例,每个对应一个数据库连接。你可以用sessionmaker绑定不同的Engine来管理会话。
下面是个具体例子,假设要同时连接一个SQLite和一个PostgreSQL数据库:
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, declarative_base
# 创建两个数据库引擎
sqlite_engine = create_engine('sqlite:///local.db')
postgres_engine = create_engine('postgresql://user:pass@localhost/mydb')
# 为每个引擎创建独立的Session类
SQLiteSession = sessionmaker(bind=sqlite_engine)
PostgresSession = sessionmaker(bind=postgres_engine)
# 声明基类(如果需要)
Base = declarative_base()
# 使用不同的会话操作不同数据库
sqlite_session = SQLiteSession()
postgres_session = PostgresSession()
# 示例操作
# sqlite_session.query(User).all()
# postgres_session.query(Product).all()
# 记得关闭会话
sqlite_session.close()
postgres_session.close()
如果要用ORM类映射到不同数据库,可以在定义模型时通过__bind_key__指定,或者用不同的Base类。更复杂的场景可以用Session的bind参数动态选择数据库。
简单说就是:一个数据库配一个Engine和Session。
当然写一个屏幕的全局变量啦。


