SQLAlchemy:有没有办法将原始查询附加到查询对象?

问题描述

我正在尝试使用 Google 中的 BigQuery 创建自定义查询

使用 sqlAlchemy 过滤器功能我几乎可以做任何事情

query = TestModel.query.filter(TestModel.timestamp.__gt__(1010101010))

但我想在下面的 where 子句上添加自定义过滤器

AND EXISTS (SELECT * FROM UNnesT(column_name) WHERE column_key LIKE '%tit%')

有没有办法像上面那样使用字符串附加过滤器?

解决方法

原始查询

你可以像下面这样清楚地做到这一点:

text_clause = text("EXISTS (SELECT * FROM UNNEST(column_name) WHERE column_key LIKE '%tit%')")
ts = 1010101010
q = (
    session.query(TestModel)
    .filter(TestModel.timestamp > ts)
    .filter(text_clause)
)

但是如果可以的话,避免它会更干净,更易于维护。

ORM 查询 下面应该让您了解如何实施它:

ts = 1010101010

subq = (
    select(literal("*"))
    .select_from(func.unnest(TestModel.column_name))
    .filter(TestModel.column_key.contains("tit"))
).exists()

q = (
    session.query(TestModel)
    .filter(TestModel.timestamp > ts)
    .filter(subq)
)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...