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()
tagstabella, dove memorizzi il nome del tag e altre informazioni sui tag, e avrai una task_tagstabella, che avrà un record per ogni tag aggiunto all'attività. Quindi l'attività con 2 tag avrà solo 2 record nella task_tagstabella.
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_tsqueryche ti consente di aggiungere operatori di testo per cose come ORe 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()