SQLAlchemy:有没有办法将原始查询附加到查询对象?
SQLAlchemy: Is there a way to append raw query to query object?
我正尝试在 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)
)
我正尝试在 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)
)