SQLAlchemy中的REGEXP_LIKE

时间:2013-02-07 11:46:58

标签: sql sqlalchemy

任何人都知道如何在SQLAlchemy中使用等效的REGEXP_LIKE?例如,我希望能够做到这样的事情:

sa.Session.query(sa.Table).filter(sa.Table.field.like(regex-to match))

感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

它应该(我无法访问Oracle)这样的工作:

sa.Session.query(sa.Table) \
          .filter(sa.func.REGEXP_LIKE(sa.Table.c.column, '[[:digit:]]'))

答案 1 :(得分:1)

如果您需要执行SQLAlchemy不支持的特定于数据库的功能,您可以使用文字过滤器。所以你仍然可以使用SQLAlchemy为你构建查询 - 即注意连接等。

以下是如何将文字过滤器与PostgreSQL正则表达式匹配运算符~

组合在一起的示例
session.query(sa.Table).filter("%s ~':regex_pattern'" % sa.Table.c.column.name).params(regex_pattern='stack')

或者您可以手动指定表和列作为文字字符串的一部分,以避免出现不明确的列名称

session.query(sa.Table).filter("table.column ~':regex_pattern'"  ).params(regex_pattern='[123]')

答案 2 :(得分:0)

这不是完全可移植的,但这是Postgres解决方案,它使用〜运算符。我们可以使用任意运算符:

sa.Session.query(sa.Table).filter(sa.Table.field.op('~', is_comparison=True)(regex-to match))

或者,假设默认优先级为0,

sa.Session.query(sa.Table).filter(sa.Table.field.op('~', 0, True)(regex-to match))

这也适用于ORM构造:

sa.Session.query(SomeClass).filter(SomeClass.field.op('~', 0, True)(regex-to match))