使用 SQLAlchemy 进行 PostgreSQL ILIKE 查询
Posted
技术标签:
【中文标题】使用 SQLAlchemy 进行 PostgreSQL ILIKE 查询【英文标题】:PostgreSQL ILIKE query with SQLAlchemy 【发布时间】:2013-12-20 06:12:51 【问题描述】:我想运行一个查询来选择标题与'%' + [some_phrase] + '%'
匹配的所有帖子,不区分大小写。也就是说,选择所有标题包含某个短语的行,不区分大小写。从我所做的研究来看,我似乎需要使用 Postgres 的 ILIKE 查询来匹配不区分大小写的内容。如何使用 SQLAlchemy 执行这样的查询?
class Post(db.Model):
id = db.Column(db.Integer, primary_key = True)
title = db.Column(db.String(250))
content = db.Column(db.String(5000))
【问题讨论】:
Case Insensitive Flask-SQLAlchemy Query 的可能重复项 【参考方案1】:我觉得应该可以
Post.query.filter(Post.title.ilike('%some_phrase%'))
http://docs.sqlalchemy.org/en/latest/orm/internals.html?highlight=ilike#sqlalchemy.orm.attributes.QueryableAttribute.ilike
【讨论】:
与更受限制的like()
函数相比,这会影响性能吗?
这取决于您使用的引擎:PostgreSQL、mysql 或其他。 SQLAlchemy 只是 SQL 的包装器。【参考方案2】:
对于 python 3.6 而不是 '%' + some_phrase + '%'
你可以写
Post.query.filter(Post.title.ilike(f'%some_phrase%'))
【讨论】:
【参考方案3】:还有另一个可行的解决方案:
from sqlalchemy.sql.operators import ilike_op
Post.query.filter(ilike_op(Post.title, f'%some_phrase%'))
当我使用hybrid_property
时,这个解决方案帮助我克服了警告Unresolved attribute reference 'ilike' for class 'property'
【讨论】:
以上是关于使用 SQLAlchemy 进行 PostgreSQL ILIKE 查询的主要内容,如果未能解决你的问题,请参考以下文章
在 Postgres 上使用 sqlalchemy 创建部分唯一索引
使用 Postgres 和 SQLAlchemy 过滤数组列
Python - 使用 sqlalchemy 的 Postgres 查询返回“空数据框”