sqlalchemy - 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)
)
推荐阅读
- c++ - 为什么初始化具有已定义 ctor 类型的值的对象不会调用复制构造函数?
- javascript - ajax请求的角度成功方法中的编译错误
- mongodb - 不能减去两个双打mongodb聚合
- javascript - Ignore javascript error in HTML file (VS Code)
- android - 如何在 Android / Kotlin 中使用 OnChange 扩展在 Fragment 中隐藏键盘
- java - 如何将对象存储到 ArrayList 中而不用在 Java 中复制?
- image - 如何在 prolog 中打开图像并在终端中显示?
- google-cloud-platform - Google Cloud Compute Python API 不接受我的启动脚本
- algorithm - 按字典的键和值对字典数组进行排序
- java - 如何在 Selenium Java 中使用键盘键复制段落