Kolumna tagów zawiera wartości takie jak „jabłko-banan-pomarańcza” i „truskawka-banan-cytryna”. Chcę znaleźć równoważną instrukcję SQLAlchemy
SELECT * FROM table WHERE tags LIKE "%banana%";
Co mam przejść, aby Class.query.filter()
to zrobić?
python
sqlalchemy
Gary Oldfaber
źródło
źródło
tags
tabelę, w której będziesz przechowywać nazwę znacznika i inne informacje o znaczniku, a takżetask_tags
tabelę, która będzie miał jeden rekord dla każdego tagu dodanego do zadania. Zatem zadanie z 2 tagami będzie miało tylko 2 rekordy wtask_tags
tabeli.Dodając do powyższej odpowiedzi, ktokolwiek szuka rozwiązania, możesz również spróbować operatora „dopasuj” zamiast „lubię”. Nie chcę być stronniczy, ale w Postgresql to działało idealnie.
Note.query.filter(Note.message.match("%somestr%")).all()
Dziedziczy funkcje bazy danych, takie jak CONTAINS i MATCH . Jednak nie jest dostępny w SQLite.
Więcej informacji można znaleźć w sekcji Wspólne operatory filtrów
źródło
to_tsquery
który pozwala dodawać operatory tekstowe dla rzeczy takich jakOR
iAND
postgresql.org/docs/current/ ...wypróbuj ten kod
output = dbsession.query(<model_class>).filter(<model_calss>.email.ilike('%' + < email > + '%'))
źródło
Korzystanie z PostgreSQL
like
( Akceptowane odpowiedź powyżej ) jakoś nie działa na mnie chociaż przypadki dopasowane , aleilike
(przypadek I nsensisitive jak ) robi.źródło
ILIKE
jest wersją programu bez rozróżniania wielkości literLIKE
, więc dane wejściowe różniły się tylko w przypadku.Jeśli używasz natywnego sql, możesz odwołać się do mojego kodu, w przeciwnym razie po prostu zignoruj moją odpowiedź.
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()
źródło