2010-11-06 138 views
20

是否可以像session.query(MyObject).filter_by(REGEX)那样使用正则表达式?SQLalchemy查询中的正则表达式?

如果不是,我该如何使用sqlAlchemy检索具有以特定值开始的varchar PK的记录(例如,所有那些以为城市字段以“SA”开头的人)?谢谢。

+1

如果使用的是Oracle,你会想用这个答案http://stackoverflow.com/a/14750641/269834 – 2014-08-13 20:42:30

回答

23

我想我明白了:

session.query(Object).filter(Object.column.op('regexp')(REGEX)) 
+8

这个答案只适用于使用'REGEXP'作为比较运算符的MySQL。您必须在其他数据库中对其进行更改,如果数据库具有正则表达式比较运算符(与例如函数相反),它将只能像这样工作。在PostgreSQL中,你可以使用'op('〜')'。 – 2015-02-26 18:11:07

3

[免责声明:无正则表达式]

我回答这个问题:“我怎么能使用SQLAlchemy检索具有一定的值开始一个varchar PK记录”,因为这个简单的使用情况下,可能LIKE既便宜又便携(要求正则表达式看起来像the XY Problem的表现)。

在SQLAlquemy(亚历克斯借款):

session.query(Object).filter(Object.column.like('something%')) 

在SqlSoup我用:

db.table.filter(db.table.column.like('something%')) 
+2

为什么downvote?一个正则表达式显然是矫枉过正的,用于测试一个字符串是否是“某些东西”。此外,并非每个数据库都具有本机正则表达式支持,但每个SQL数据库都支持“like”语句 - 服务器端操作总是更好。 – 2012-01-13 22:24:29

+0

因为“喜欢”不如正则表达式... – Sylvestre 2015-01-21 16:07:42

+1

@Sylvestre ...而且方式更昂贵和便携性更低。 – 2015-01-21 17:27:50

3

对于记录,可以与Paulo Scardine在SQLAlchemy中的回答基本相同;

session.query(Object).filter(Object.column.like('something%')) 
+0

为什么downvote? *从字面上*我所做的只是提供一个SQLAlchemy翻译来描述另一个答案。我并不是说它更好,甚至是我翻译的答案是最好的解决方案。如果有错误的评论和正确(可能会有),但不要随意donwvote! – Alex 2014-10-17 13:33:52

+1

这是一个'喜欢',而不是问题中所要求的'正则表达式'。 – 2016-01-25 09:02:31