Query对象的
SA支持正则表达式,但它们似乎是Python正则表达式(SQLalchemy查询中的正则表达式?)
我需要在匹配某些行时使用regex(一行包含1个日志行,因此regex是一个自然的匹配),但出于性能原因,我更喜欢使用PG后端进行匹配,比如这个问题:
select * from table where name ~ 'foo';
如何将PG实现的regex和SQLAlchemy对象选择组合在一个查询中?
注意,您还可以使用中缀运算符支持:
session.query(Table).filter(Table.name.op("~")('foo'))
filter()
方法允许您使用原始SQL作为过滤器。所以,你可以做…
Table.query.filter("name ~ 'foo'")
请注意,如果要将其作为参数提供,可以使用text()
和params()
。。。
from sqlalchemy.sql import text
Table.query.filter(text('name ~ :reg')).params(reg='foo')
因为我们使用text()
在过滤器中定义"reg"绑定参数,所以我们需要确保定义值,这可以使用params()
来完成。