如何在SQLAlchemy中进行跨服务器查询?

2022-09-28 20:17:59 发布

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

我想把我在T-SQL上编写的大部分代码转换成Python,并且遇到了一些基本的数据问题,这些问题无法通过在SQLAlchemy文档和其他论坛中搜索来解决。你知道吗

问题:

如何使用SQLAlchemy实现以下查询选项(下面的测试示例)?你知道吗

  1. select a.field1, a.field2, b.field2 from server1.database1.schema1.table_a as a inner server2.database1.schema1.table_b as b on a.fileld1 = b.fileld1

  2. select a.field1, a.field2, b.field2 from server1.database1.schema1.table_a as a inner dataset_variable (**) as b on a.fileld1 = b.fileld1

  3. The result of the query - print (select) (see below in the test case) returns an error: sqlalchemy.exc.ProgrammingError: (pyodbc.ProgrammingError) ('42S02', "[42S02] [M icrosoft] [ODBC SQL Server Driver] [SQL Server] Invalid object name 'server2.database1schema1.table_b'.

**从另一个SQLAlchemy会话(server2.database1.schema1.table\u b)接收并存储在变量dataset\u variable中的数据

测试连接示例: 使用两个链接的sql服务器。你知道吗

engine = create_engine("mssql+pyodbc://@{server1}/{}?driver=SQL+Server?trusted_connection=yes", echo=True)

metadata = MetaData(engine)
Base = declarative_base(metadata=metadata)

class table_a(Base):
    __tablename__ = 'table_a '
    __table_args__ = {
    'schema': 'database1.schema1'
    }
    id = Column(Integer, primary_key=True)
    f1 = Column(String(100))
    f2 = Column(String(100))

class table_b(Base):
    __tablename__ = 'table_b '
    __table_args__ = {
    'schema': 'server2.database1.schema1'
    }
    id = Column(Integer, primary_key=True)
    f1 = Column(String(100))
    f2 = Column(String(100))

Session = sessionmaker(bind=engine)
session = Session()

select = session.query(table_b.id).first() 
print(select)

Tags: sqlstringserversqlalchemyastablecolumnselectdatabaseengineserver1field2schema1server2fileld1

热门问题