@ZSVasily

Как сделать следующие запросы SQLAlchemy?

Здравствуйте! Хотел бы перенести большую часть своего кода написанного на T-SQL в Питонье русло и наткнулся на базовые проблемы работы с данными, которые не смог решить поиском в документации 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. Результат запроса - print(select) (см. ниже в тестовом примере) возвращает ошибку:
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_b) и сохраненные в переменную dataset_variable

Тестовый пример подключения:
Используются два linked 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)
  • Вопрос задан
  • 844 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы