我是sqlalchemy和orm的新手,并且在连接不同数据库的表时遇到了一些问题。
使用pandas我可以使用以下内容查询同一服务器上的多个数据库:
engine = sqlalchemy.create_engine("some_server")
df = pd.read_sql_query("""
select top 10 t1.*
from db1.dbo.table1 t1
inner join db2.dbo.table2 t2
on t1.user_id = t2.user_id
""",
engine
)
我现在想用sqlalchemy的orm做类似的操作。 现在说我已经从数据库中获取了元数据信息,因此我将T1和T2作为表。如果我现在开始一个会话并创建一个查询:
Session = sessionmaker()
Session.configure(binds={
T1: create_engine("server_db1"),
T2: create_engine("server_db2")
}
session = Session()
q = (session.query(T1)
.join(T2, T1.c.user_id == T2.c.user_id)
.limit(10)
)
从此查询生成的结果SQL语句不会考虑引擎中指定的数据库名称,因此我将具有以下查询:
select top 10 t1.*
from dbo.table1 t1
inner join dbo.table2 t2
on t1.user_id = t2.user_id
当我想使用one()或all()检索结果时,会导致table2上出现无效对象名错误,因为table2仅存在于db2中。
所以我的问题是:
任何对sqlalchemy和orm有更多经验的人的建议也会受到赞赏。