任何人都知道如何在SQLAlchemy中使用等效的REGEXP_LIKE?例如,我希望能够做到这样的事情:
sa.Session.query(sa.Table).filter(sa.Table.field.like(regex-to match))
感谢您的帮助!
答案 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))