Peewee 过滤器


可以使用 where 子句从 SQLite 表中检索数据。 Peewee 支持以下逻辑运算符列表。

== x 等于 y
< x 小于 y
<= x 小于或等于 y
> x 大于 y
>= x 大于或等于 y
!= x 不等于 y
<< x IN y,其中 y 是列表或查询
>> x 是 y,其中 y 是 None/NULL
% x LIKE y 其中 y 可能包含通配符
** x ILIKE y 其中 y 可能包含通配符
^ x XOR y
~ 一元否定(例如,NOT x)

以下代码显示名称 年龄>=20:

rows=User.select().where (User.age>=20)
for row in rows:
    print ("name: {} age: {}".format(row.name, row.age))

以下代码仅显示名称列表中存在的那些名称。

names=['Anil', 'Amar', 'Kiran', 'Bala']
rows=User.select().where (User.name << names)
for row in rows:
    print ("name: {} age: {}".format(row.name, row.age))

Peewee 这样生成的 SELECT 查询将是:

('SELECT "t1"."id", "t1"."name", "t1"."age" FROM "User" AS "t1" WHERE 
    ("t1"."name" IN (?, ?, ?, ?))', ['Anil', 'Amar', 'Kiran', 'Bala'])

结果输出如下:

name: Amar age: 20
name: Kiran age: 19

过滤方法


除了上述核心 Python 中定义的逻辑运算符外,Peewee 还提供了以下过滤方法:

序号 方法和描述
1

.in_(值)

IN 查找(与 << 相同)。
2

.not_in(值)

不在查找中。

3

.is_null(is_null)

IS NULL 或 IS NOT NULL。接受布尔参数。

4

.contains(substr)

子字符串的通配符搜索。

5

.startswith(前缀)

搜索以前缀开头的值。

6

.endswith(后缀)

搜索以后缀结尾的值。

7

.between(低,高)

搜索低和高之间的值。

8

.regexp(exp)

正则表达式匹配(区分大小写)。

9

.iregexp(exp)

正则表达式匹配(不区分大小写)。

10

.bin_and(值)

二进制与。

11

.bin_or(值)

二进制或。

12

.concat(其他)

使用 || 连接两个字符串或对象。

13

。清楚的()

标记列以进行 DISTINCT 选择。

14

.collat​​e(整理)

使用给定的排序规则指定列。

15

.cast(类型)

将列的值转换为给定的类型。

作为上述方法的示例,请查看以下代码。它检索以“R”开头或以“r”结尾的名称。

rows=User.select().where (User.name.startswith('R') | User.name.endswith('r'))

等效的 SQL SELECT 查询是:

('SELECT "t1"."id", "t1"."name", "t1"."age" FROM "User" AS "t1" WHERE 
    (("t1"."name" LIKE ?) OR ("t1"."name" LIKE ?))', ['R%', '%r'])

备择方案


Python 的内置运算符 in、not in、and、or 等将不起作用。相反,请使用 Peewee 替代品。

你可以使用:

  • .in_() 和 .not_in() 方法而不是 in 和 not in 运算符。

  • & 而不是和。

  • |而不是或。

  • ~ 而不是。

  • .is_null() 而不是 is。

  • 无或 == 无。