PostgreSQL ILIKE query with SQLAlchemy

Question:

I’d like to run a query that selects all posts, case insensitive, that have titles that match '%' + [some_phrase] + '%'. That is, select all rows that have titles that contain some phrase, case insensitive. From the research I’ve done, it looks like I need to use Postgres’s ILIKE query for it to match case insensitive. How can I execute a query like this with 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))
Asked By: sundance

||

Answers:

Answered By: user1454592

For python 3.6 instead of '%' + some_phrase + '%' you can write

Post.query.filter(Post.title.ilike(f'%{some_phrase}%'))
Answered By: Anatoly E

There is another workable solution:

from sqlalchemy.sql.operators import ilike_op
Post.query.filter(ilike_op(Post.title, f'%{some_phrase}%'))

This solution helped me to overcame the warning Unresolved attribute reference 'ilike' for class 'property' when I used hybrid_property

Answered By: akpp