У меня есть ситуация, когда я пытаюсь подсчитать количество строк в таблице, когда значение столбца находится в подзапросе. Например, скажем, что у меня есть несколько sql, например:
select count(*) from table1
where column1 in (select column2 from table2);
У меня есть таблицы, определенные следующим образом:
class table1(Base):
__tablename__ = "table1"
__table_args__ = {'schema': 'myschema'}
acct_id = Column(DECIMAL(precision=15), primary_key=True)
class table2(Base):
__tablename__ = "table2"
__table_args__ = {'schema': 'myschema'}
ban = Column(String(length=128), primary_key=True)
Таблицы отражаются в базе данных, поэтому есть другие атрибуты, которые явно не указаны в определении класса.
Я могу попытаться написать мой запрос, но вот где я застрял...
qry=self.session.query(func.?(...)) # what to put here?
res = qry.one()
Я попытался просмотреть документацию здесь, но я не вижу сопоставимой реализации ключевого слова 'in', которое является особенностью многих диалектов SQL.
Я использую Teradata в качестве моего бэкэнда, если это имеет значение.
sub_stmt = session.query(table2.some_id)
stmt = session.query(table1).filter(table1.id.in_(sub_stmt))
data = stmt.all()