SQLAlchemy中regexp_match正则匹配如何忽略大小写
有三种常用的实现方式,你可以根据你使用的数据库选择:
- 方式一:使用正则内联忽略大小写标记(兼容绝大多数支持正则的数据库,通用性最强)
直接在你要匹配的正则字符串前加(?i)前缀即可,代码示例:
stmt = session.query(models.Production).filter(models.Production.profile_name.regexp_match('(?i)some_name')) results = session.execute(stmt).all() print(results)
(?i)是正则通用的内联修饰符,标识当前正则匹配忽略大小写,不需要额外传参,也不需要调整数据库配置。
- 方式二:传入数据库专属的忽略大小写参数
如果你使用PostgreSQL数据库,regexp_match方法支持传入第二个参数作为匹配标记,传'i'即可实现忽略大小写:
stmt = session.query(models.Production).filter(models.Production.profile_name.regexp_match('some_name', 'i')) results = session.execute(stmt).all() print(results)
如果你使用MySQL 8.0+版本,可以调用regexp_like函数传入第三个标记参数实现:
from sqlalchemy import func stmt = session.query(models.Production).filter(func.regexp_like(models.Production.profile_name, 'some_name', 'i')) results = session.execute(stmt).all() print(results)
- 方式三:全小写转换后匹配(兼容性最高,适配所有数据库)
把数据库字段和匹配规则都转成全小写后再执行正则匹配,不需要依赖数据库的正则特性支持:
from sqlalchemy import func stmt = session.query(models.Production).filter(func.lower(models.Production.profile_name).regexp_match('some_name')) results = session.execute(stmt).all() print(results)
注意这个写法需要你自己保证正则匹配的内容全部是小写格式。
内容的提问来源于stack exchange,提问作者A1122
相关产品推荐
相关产品推荐

