任何人都知道我如何在 SQLAlchemy 中使用 REGEXP_LIKE 的等价物?例如,我希望能够执行以下操作:
sa.Session.query(sa.Table).filter(sa.Table.field.like(regex-to match))
谢谢你的帮助!
任何人都知道我如何在 SQLAlchemy 中使用 REGEXP_LIKE 的等价物?例如,我希望能够执行以下操作:
sa.Session.query(sa.Table).filter(sa.Table.field.like(regex-to match))
谢谢你的帮助!
它应该(我无法访问 Oracle)像这样工作:
sa.Session.query(sa.Table) \
.filter(sa.func.REGEXP_LIKE(sa.Table.c.column, '[[:digit:]]'))
如果您需要执行 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]')
这不是完全可移植的,但这是一个使用 ~ 运算符的 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))