Maison >développement back-end >Tutoriel Python >Introduction à la méthode de définition des conditions de requête SQLAlchemy sous programmation Python

Introduction à la méthode de définition des conditions de requête SQLAlchemy sous programmation Python

不言
不言avant
2018-10-23 16:47:533651parcourir
Cet article vous présente la méthode de définition des conditions de requête SQLAlchemy sous la programmation Python. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

Dans la programmation réelle, les enregistrements de base de données doivent être interrogés en fonction de diverses conditions de requête SQLAlchemy sont appelées filtres. Voici une liste des filtres les plus couramment utilisés.

1. Filtre d'égalité (==)

Le filtre d'égalité est utilisé pour déterminer si une colonne est égale à une certaine valeur et est le filtre le plus couramment utilisé.

session.query(Account).filter(Account.user_name=='Mark') #判断字符串类型
session.query(Account).filter(Account.salary==2000) #判断数值类型

2. Filtres inégaux (!=, <, >, <=, >=)

et filtres égaux Le contraire est le filtre d'inégalité, qui peut être étendu à plusieurs formes : non égal à, inférieur à, supérieur à, inférieur ou égal à, supérieur ou égal à.

session.query(Account).filter(Account.user_name !="mark" ) #不等于字符串类型
session.query(Account).filter(Account.salary !=2000) #不等于数值类型
session.query(Account).filter(Account.salary >2000) #大于过滤器
session.query(Account).filter(Account.salary <2000) #小于过滤器
session.query(Account).filter(Account.salary <=2000) #小于等于过滤器
session.query(Account).filter(Account.salary >=2000) #大于等于过滤器

3. Requête floue (comme)

La requête floue convient lorsque seule une partie du contenu de la chaîne de requête est connue en définissant la position. du caractère générique, vous pouvez La requête donne des résultats différents. Les caractères génériques sont représentés par le signe de pourcentage %.

Supposons que les données du tableau sont :

id user_name title salary
1 David Li System Manager 3000
2 Debeca Li Accountant 3000
3 David Backer Engineer 3000
4 Siemon Bond Enfineer 4000
5 Van Berg General Manager NULL
#查询所有名字包含字母i的用户,结果包括id为1、2、3、4的4条记录
session.query(Account).filter(Account.user_name.like('%i%'))

#查询所有title中以Manager结尾的用户,结果包括id为1、5的两条记录
session.query(Account).filter(Account.title.like('%Manager'))

#查询所有名字中以Da开头的用户,结果包括id为1、3的两条记录
session.query(Account).filter(Account.user_name.like('Da%'))

Remarque : la requête floue s'applique uniquement aux types de chaîne de requête, pas aux types numériques.

4. Inclure le filtre (in_)

Lorsque vous connaissez exactement le contenu du champ de l'enregistrement que vous souhaitez interroger, mais qu'un champ a plusieurs contenus à interroger, vous peut utiliser des filtres Contient.

#查询id不为1,3,5的记录,结果包含id为2,4的两条记录
session.query(Account).filter(~Account.id.in_([1,3,5]))
#查询工资不为2000、3000、4000的记录,结果包含id为5的1条记录
session.query(Account).filter(~Account.id.in_([2000,3000,4000]))
#查询所有title不为Engineer和Accountant记录,结果包括id为1、5的两条记录
session.query(Account).filter(~Account.title.in_(['Accountant','Engineer']))

5. Déterminez s'il est vide (est NULL, n'est pas NULL)

La valeur nulle NULL est une valeur spéciale dans les champs de la base de données. SQLAlchemy permet de déterminer si un champ est vide. Lors du jugement, vous pouvez utiliser des filtres à valeurs égales et inégales pour filtrer, ou vous pouvez utiliser est et n'est pas pour filtrer.

#查询salary为空值的记录,结果包含id为5的记录
#下面两方式效果相同
session.query(Account).filter(Account.salary==None)
session.query(Account).filter(Account,salary.is_(None))

#查询salary不为空值的记录,结果包含id为1、2、3、4的记录
#下面两方式效果相同
session.query(Account).filter(Account.salary!=None)
session.query(Account).filter(Account.salary.isnot(None))

6. Non logique (~)

Vous pouvez utiliser non logique lorsque vous devez interroger des enregistrements qui ne remplissent pas certaines conditions.

#查询id不为1、3、5的记录,结果包含id为2、4的两条记录
session.query(Account).filter(~Account.id.in_([1,3,5]))

#查询工资不为2000、3000、4000的记录,结果包含id为5的1条记录
session.query(Account).filter(~Account.id.in_([2000,3000,4000]))

#查询所有title不为Engineer和Accountant的记录,结果包括id为1、5的2条记录。
session.query(Account).filter(~Account.title.in(['Accountant','Engineer']))

7. Logique ET (et_)

Lorsque vous devez interroger des enregistrements qui remplissent plusieurs conditions en même temps, vous devez utiliser la logique ET. Il existe trois façons d'exprimer la logique dans SQLAlchemy.

Les résultats de requête des trois instructions suivantes sont les mêmes et ce sont tous des enregistrements avec l'ID 3.

#直接在filter中添加多个条件即表示与逻辑
session.query(Account).filter(Account.title=='Engineer',Account.salary=3000)

#用关机子and_进行逻辑查询
from sqlalchemy import and_
session.query(Account).filter(and_(Account.title=='Engineer',Account.salary=3000))

#通过多个filter的链接表示与逻辑
session.query(Account).filter(Account.title=='Engineer').filter(Account.salary=3000)

8. Ou logique (or_)

Lorsque plusieurs conditions doivent être interrogées mais qu'une seule des conditions doit être remplie, la logique OU doit être utilisé.

#引入或逻辑关键字or_
from sqlalchemy import or_

#查询title是Engineer或者salary为3000的记录,返回结果为id为1、2、3、4的记录
session.query(Account).filter(or_(Account.title=='Engineer',Account.salary=3000))

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer