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ć?
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ć?
Odpowiedzi:
Każda kolumna ma like()metodę, której można użyć w query.filter(). Mając wyszukiwany ciąg, dodaj %znak po obu stronach, aby wyszukiwać jako podciąg w obu kierunkach.
tag = request.form["tag"]
search = "%{}%".format(tag)
posts = Post.query.filter(Post.tags.like(search)).all()
tagstabelę, w której będziesz przechowywać nazwę znacznika i inne informacje o znaczniku, a także task_tagstabelę, 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 w task_tagstabeli.
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
to_tsqueryktóry pozwala dodawać operatory tekstowe dla rzeczy takich jak ORi AND postgresql.org/docs/current/ ...
Korzystanie z PostgreSQL like( Akceptowane odpowiedź powyżej ) jakoś nie działa na mnie chociaż przypadki dopasowane , ale ilike(przypadek I nsensisitive jak ) robi.
ILIKEjest wersją programu bez rozróżniania wielkości liter LIKE, 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()