web-dev-qa-db-fra.com

sqlalchemy filtre plusieurs colonnes

Comment combiner deux colonnes et appliquer un filtre? Par exemple, je souhaite rechercher à la fois dans les colonnes "prénom" et "nom" en même temps. Voici comment je l'ai fait si je ne cherchais qu'une seule colonne:

query = meta.Session.query(User).filter(User.firstname.like(searchVar))
52
teggy

Vous pouvez utiliser la fonction or_ de SQLAlchemy pour rechercher dans plusieurs colonnes (le trait de soulignement est nécessaire pour le distinguer du or de Python) .

Voici un exemple:

from sqlalchemy import or_
query = meta.Session.query(User).filter(or_(User.firstname.like(searchVar),
                                            User.lastname.like(searchVar)))
52
gclj5

Vous pouvez simplement appeler filter plusieurs fois:

query = meta.Session.query(User).filter(User.firstname.like(searchVar1)). \
                                 filter(User.lastname.like(searchVar2))
51
David Johnstone

Il existe plusieurs façons de procéder:

Utilisation de filter() (opérateur et)

query = meta.Session.query(User).filter(
    User.firstname.like(search_var1),
    User.lastname.like(search_var2)
    )

Utilisation de filter_by() (opérateur et)

query = meta.Session.query(User).filter_by(
    firstname.like(search_var1),
    lastname.like(search_var2)
    )

Chaînage filter() ou filter_by() (et opérateur)

query = meta.Session.query(User).\
    filter_by(firstname.like(search_var1)).\
    filter_by(lastname.like(search_var2))

Utilisation de or_(), and_() et not()

from sqlalchemy import and_, or_, not_

query = meta.Session.query(User).filter(
    and_(
        User.firstname.like(search_var1),
        User.lastname.like(search_var2)
    )
)
39
Vlad Bezden