mysql之正则查找

背景

通常在数据库模糊查询的时候,可以使用like '%string%'的方式查找,那么当有多个条件模糊查询的是,如果采用多个子查询然后union的方式会显的比较繁琐。

这时候就需要用到正则来查询。

正则查询

例如我们需要查询Posts表中,body字段存在aa或者bb的所有信息。

在mysql中,正则查询可以通过rlike或者regexp两个关键字来实现:

1
select * from posts where body rlike 'aa|bb'

或者

1
select * from posts where body regexp 'aa|bb'

sqlalchemy的正则查询

如果用的是alchemy,比如新建了Post模型,那么方法如下:

1
2
regpattern = 'aa|bb'
Post.query.filter(Post.body.op('regexp')(regpattern)).all()

扩展

sqlalchemy关于mysql的正则表达式说明:https://docs.sqlalchemy.org/en/13/dialects/mysql.html?highlight=regexp#mysql-sql-extensions