Una colonna di tag ha valori come "mela banana arancia" e "fragola banana limone". Voglio trovare l'istruzione equivalente a SQLAlchemy
SELECT * FROM table WHERE tags LIKE "%banana%";
A cosa devo passare Class.query.filter()
per farlo?
Una colonna di tag ha valori come "mela banana arancia" e "fragola banana limone". Voglio trovare l'istruzione equivalente a SQLAlchemy
SELECT * FROM table WHERE tags LIKE "%banana%";
A cosa devo passare Class.query.filter()
per farlo?
Risposte:
Ogni colonna ha un like()
metodo, che può essere utilizzato in query.filter()
. Data una stringa di ricerca, aggiungi un %
carattere su entrambi i lati per cercare come sottostringa in entrambe le direzioni.
tag = request.form["tag"]
search = "%{}%".format(tag)
posts = Post.query.filter(Post.tags.like(search)).all()
tags
tabella, dove memorizzi il nome del tag e altre informazioni sui tag, e avrai una task_tags
tabella, che avrà un record per ogni tag aggiunto all'attività. Quindi l'attività con 2 tag avrà solo 2 record nella task_tags
tabella.
Aggiungendo alla risposta sopra, chiunque cerchi una soluzione, puoi anche provare l'operatore "match" invece di "like". Non voglio essere di parte, ma ha funzionato perfettamente per me in Postgresql.
Note.query.filter(Note.message.match("%somestr%")).all()
Eredita le funzioni del database come CONTAINS e MATCH . Tuttavia, non è disponibile in SQLite.
Per maggiori informazioni vai su Common Filter Operators
to_tsquery
che ti consente di aggiungere operatori di testo per cose come OR
e AND
postgresql.org/docs/current/…
L'uso di PostgreSQL like
( vedi la risposta accettata sopra ) in qualche modo non ha funzionato per me anche se i casi corrispondevano , ma ilike
(case i nsensitive like ) sì .
ILIKE
è la versione senza distinzione tra maiuscole e minuscole di LIKE
, quindi i tuoi input differiscono solo nel caso.
Se usi sql nativo, puoi fare riferimento al mio codice, altrimenti ignora la mia risposta.
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()