问题描述
我正在尝试使用 Google 中的 BigQuery 创建自定义查询
query = TestModel.query.filter(TestModel.timestamp.__gt__(1010101010))
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)
)