如何在SQLAlchemy中进行crossdatabasequery连接?

2024-10-02 00:34:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我在SQLAlchemy中找不到这个简单查询的解决方案示例。SQLAlchemy是否可以替换T-sqletl数据修改?在

select a.field1, a.field2, b.field2
    from database1.schema1.table_a as a
    inner join database2.schema1.table_b as b
         on a.fileld1 = b.fileld1

我将此连接用于windows身份验证:

^{pr2}$

Tags: 数据from示例sqlalchemyastable解决方案select
1条回答
网友
1楼 · 发布于 2024-10-02 00:34:23

你需要的是multipart schema names。这和使用^{}(如果您使用的是声明性的)将允许您执行查询。由于您省略了表或模型定义,因此我将根据您的查询示例生成示例:

In [8]: class TableA(Base):
   ...:     __tablename__ = 'table_a'
   ...:     __table_args__ = {
   ...:         'schema': 'database1.schema1'
   ...:     }
   ...:     id = Column(Integer, primary_key=True)
   ...:     field1 = Column(Integer)
   ...:     field2 = Column(Integer)
   ...:     

In [9]: class TableB(Base):
   ...:     __tablename__ = 'table_b'
   ...:     __table_args__ = {
   ...:         'schema': 'database2.schema1'
   ...:     }
   ...:     id = Column(Integer, primary_key=True)
   ...:     field1 = Column(Integer)
   ...:     field2 = Column(Integer)
   ...:     

In [10]: q = session.query(TableA.field1, TableA.field2, TableB.field2).\
    ...:     join(TableB, TableA.field1 == TableB.field1)

In [12]: q.statement.compile(dialect=mssql.dialect())
Out[12]: <sqlalchemy.dialects.mssql.base.MSSQLCompiler at 0x7fa3886027b8>

In [13]: print(_)
SELECT database1.schema1.table_a.field1, database1.schema1.table_a.field2, database2.schema1.table_b.field2 
FROM database1.schema1.table_a JOIN database2.schema1.table_b ON database1.schema1.table_a.field1 = database2.schema1.table_b.field1

相关问题 更多 >

    热门问题