117 votes

SQLAlchemy équivalent à SQL "LIKE" instruction

Une colonne de tags a des valeurs comme "orange banane pomme" et "citron banane fraise". Je veux trouver la déclaration d'équivalent SQLAlchemy à

SELECT * FROM table WHERE tags LIKE "%banana%";

Que dois-je passer à Class.query.filter() pour le faire ?

244voto

Daniel Kluev Points 4321

Chaque colonne a la méthode like(), qui peut être utilisée en query.filter(). Avec une chaîne de recherche, ajoutez un caractère % de chaque côté pour effectuer une recherche en tant que sous-chaîne dans les deux directions.

tag = request.form["tag"]
search = "%{}%".format(tag)
posts = Post.query.filter(Post.tags.like(search)).all()

12voto

waruna k Points 75

essayez ce code

output = dbsession.query(<model_class>).filter(<model_calss>.email.ilike('%' + < email > + '%'))

8voto

Prason Ghimire Points 21

Dans le cas où vous voulez la casse insensible comme la mise en œuvre de la clause :

session.query(TableName).filter(TableName.colName.ilike(f'%{search_text}%')).all()

2voto

Toby Points 1

Si vous utilisez natif sql, vous pouvez vous référer à mon code, sinon ignorez simplement ma réponse.

SELECT * FROM table WHERE tags LIKE "%banana%";
from sqlalchemy import text

bar_tags = "banana"

# '%' attention to spaces
query_sql = """SELECT * FROM table WHERE tags LIKE '%' :bar_tags '%'"""

# db is sqlalchemy session object
tags_res_list = db.execute(text(query_sql), {"bar_tags": bar_tags}).fetchall()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X