SQLAlchemy + PostgreSQL + PG正则表达式

Let*_*t4U 8 python regex postgresql sqlalchemy

SA支持正则表达式,但那些似乎是Python regexps(SQLalchemy查询中的正则表达式?)

我需要在匹配某些行时使用正则表达式(一行包含1个日志行,因此正则表达式是自然匹配)但出于性能原因,我更倾向于使用PG后端,就像在这个问题中一样:

select * from table where name ~ 'foo';
Run Code Online (Sandbox Code Playgroud)

如何在一个查询中将PG实现的正则表达式和SQLAlchemy对象选择结合起来?

Chr*_*ers 15

请注意,您还可以使用中缀运算符支持:

session.query(Table).filter(Table.name.op("~")('foo'))
Run Code Online (Sandbox Code Playgroud)


Mar*_*eth 13

filter()Query对象的方法允许您使用原始SQL作为过滤器.所以,你可以......

Table.query.filter("name ~ 'foo'")
Run Code Online (Sandbox Code Playgroud)

请注意,如果您想将此作为参数提供,则可以使用text()params()...

from sqlalchemy.sql import text

Table.query.filter(text('name ~ :reg')).params(reg='foo')
Run Code Online (Sandbox Code Playgroud)

因为我们在过滤器中使用定义"reg"绑定参数,所以text()我们需要确保定义我们可以使用的值params().

  • 谢谢!!这个带绑定参数的东西也很有用(防止sql注入之类的)。 (2认同)