任何人都知道我怎么能在SQLAlchemy中使用REGEXP_LIKE的等价物?例如,我希望能够做到这样的事情:SQLAlchemy中的REGEXP_LIKE
sa.Session.query(sa.Table).filter(sa.Table.field.like(regex-to match))
感谢您的帮助!
任何人都知道我怎么能在SQLAlchemy中使用REGEXP_LIKE的等价物?例如,我希望能够做到这样的事情: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')
,或者你可以手动指定表和列作为文本字符串的一部分,以避免ambigious列名的情况下
session.query(sa.Table).filter("table.column ~':regex_pattern'" ).params(regex_pattern='[123]')
不好意思,但你的回答在regex_pattern给我一个错误。括号是否正确? table.column是否正确?它不应该是sa.Table.column?在任何情况下,即使以这种方式接收错误,但我无法知道错误是什么,它只在“1”处或附近说(编程错误)语法错误。 –
对错字很抱歉。在regex_pattern之后不应该有括号。请参阅更新版本。还取决于''sa.Table''类型有不同的方式来获取列。如果它是“Table(..)”,则是用户“sa.Table.c.column.name”。如果它是映射对象,那么只是''sa.Table.column.name'' – vvladymyrov
对不起,我不明白,这是我的查询:sa.Session.query(sa.BaseApparati).filter(“sa .BaseApparati.column.nome〜':regex_pattern'“).params(regex_pattern ='[123]')。all()。表的名称是“BaseApparati”,列的名称是“Nome”,那么正确的输入是什么?我仍然收到“编程错误...”。谢谢 –
这不是完全可移植的,但这里是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))
FUNC没有名为REGEXP_LIKE的属性。 .c.column的含义是什么?这是否意味着该领域?我尝试过.field和.field.column,但都没有工作 –
您使用的是哪个数据库? – plaes
PostgreSql ...但不是独立于数据库的sqlAlchemy? –