Eine Tags-Spalte enthält Werte wie "Apfel-Bananen-Orange" und "Erdbeer-Bananen-Zitrone". Ich möchte die entsprechende SQLAlchemy-Anweisung finden
SELECT * FROM table WHERE tags LIKE "%banana%";
Was soll ich Class.query.filter()
tun, um dies zu tun?
python
sqlalchemy
Gary Oldfaber
quelle
quelle
tags
Tabelle, in der Sie den Tag-Namen und andere Tag-Informationen speichern, und Sie haben einetask_tags
Tabelle, die Für jedes der Aufgabe hinzugefügte Tag wird ein Datensatz hinzugefügt. Eine Aufgabe mit 2 Tags enthält also nur 2 Datensätze in dertask_tags
Tabelle.Wenn Sie zu der obigen Antwort hinzufügen, wer auch immer nach einer Lösung sucht, können Sie auch den Operator "Übereinstimmung" anstelle von "Gefällt mir" versuchen. Ich möchte nicht voreingenommen sein, aber es hat perfekt für mich in Postgresql funktioniert.
Note.query.filter(Note.message.match("%somestr%")).all()
Es erbt Datenbankfunktionen wie CONTAINS und MATCH . Es ist jedoch in SQLite nicht verfügbar.
Weitere Informationen finden Sie unter Allgemeine Filteroperatoren
quelle
to_tsquery
für Dinge wieOR
undAND
postgresql.org/docs/current/…Versuchen Sie diesen Code
output = dbsession.query(<model_class>).filter(<model_calss>.email.ilike('%' + < email > + '%'))
quelle
Die Verwendung von PostgreSQL
like
( siehe akzeptierte Antwort oben ) hat bei mir irgendwie nicht funktioniert, obwohl die Fälle übereinstimmten , aberilike
(wenn ich nicht empfindlich bin wie ).quelle
ILIKE
ist die Version vonLIKE
, bei der die Groß- und Kleinschreibung nicht berücksichtigt wird , sodass sich Ihre Eingaben nur für den Fall unterschieden.Wenn Sie natives SQL verwenden, können Sie auf meinen Code verweisen, andernfalls ignorieren Sie einfach meine Antwort.
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()
quelle