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 异或 y |
| ~ | 一元否定(例如,NOT x) |
以下代码显示带有 age>=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还提供了以下过滤方法 −
| Sr.No | 方法与说明 |
|---|---|
| 1 | .in_(value) IN 查找(等同于 <<)。 |
| 2 | .not_in(value) 不在查找中。 |
| 3 | .is_null(is_null) IS NULL 或 IS NOT NULL。 接受布尔参数。 |
| 4 | .contains(substr) 子字符串的通配符搜索。 |
| 5 | .startswith(prefix) 搜索以前缀开头的值。 |
| 6 | .endswith(suffix) 搜索以后缀结尾的值。 |
| 7 | .between(low, high) 搜索low(低)和high(高)之间的值。 |
| 8 | .regexp(exp) 正则表达式匹配(区分大小写)。 |
| 9 | .iregexp(exp) 正则表达式匹配(不区分大小写)。 |
| 10 | .bin_and(value) 二进制与。 |
| 11 | .bin_or(value) 二进制或。 |
| 12 | .concat(other) 使用 || 连接两个字符串或对象。 |
| 13 | .distinct() 为 DISTINCT 选择标记列。 |
| 14 | .collate(collation) 使用给定的排序规则指定列。 |
| 15 | .cast(type) 将列的值转换为给定类型。 |
作为上述方法的示例,请查看以下代码。 它检索以"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 运算符。
& 而不是 and。
| 而不是 or。
~ 而不是 not.
.is_null() 而不是 is。
None 或 == None。

