|
| 1 | +SQLAlchemy CRUD Plus 支持高级过滤选项,允许使用运算符查询记录,如大于(`__gt`)、小于(`__lt`); |
| 2 | + |
| 3 | +大多数过滤器操作符需要一个字符串或整数值 |
| 4 | + |
| 5 | +```python |
| 6 | +# 获取年龄大于 30 岁以上的员工 |
| 7 | +items = await item_crud.select_models( |
| 8 | + session=db, |
| 9 | + age__gt=30, |
| 10 | +) |
| 11 | +``` |
| 12 | + |
| 13 | +## 比较运算符 |
| 14 | + |
| 15 | +- `__gt`:大于 |
| 16 | +- `__lt`:小于 |
| 17 | +- `__ge`:大于或等于 |
| 18 | +- `__le`:小于或等于 |
| 19 | +- `__eq`: 等于 |
| 20 | +- `__ne`: 不等于 |
| 21 | +- `__between`: 在两者之间 |
| 22 | + |
| 23 | +## IN 比较 |
| 24 | + |
| 25 | +- `__in`: 包含 |
| 26 | +- `__not_in`: 不包括 |
| 27 | + |
| 28 | +## 身份比较 |
| 29 | + |
| 30 | +- `__is`:用于测试 “真”、“假” 和 “无”。 |
| 31 | +- `__is_not`:“is” 的否定 |
| 32 | +- `__is_distinct_from`: 产生 SQL IS DISTINCT FROM |
| 33 | +- `__is_not_distinct_from`: Produces SQL IS NOT DISTINCT FROM |
| 34 | +- `__like`:针对特定文本模式的 SQL “like” 搜索 |
| 35 | +- `__not_like`:“like” 的否定 |
| 36 | +- `__ilike`:大小写不敏感的 “like” |
| 37 | +- `__not_ilike`:大小写不敏感的 “not_like” |
| 38 | + |
| 39 | +## 字符串比较 |
| 40 | + |
| 41 | +- `__startswith`:文本以给定的字符串开始 |
| 42 | +- `__endswith`:文本以给定字符串结束 |
| 43 | +- `__contains`:文本包含给定字符串 |
| 44 | + |
| 45 | +## 字符串匹配 |
| 46 | + |
| 47 | +- `__match`:特定于数据库的匹配表达式 |
| 48 | + |
| 49 | +## 字符串修改 |
| 50 | + |
| 51 | +- `__concat`: 字符串连接 |
| 52 | + |
| 53 | +## 算术运算符 |
| 54 | + |
| 55 | +此过滤器使用方法需查看:[算数](#_8) |
| 56 | + |
| 57 | +- `__add`: Python `+` 运算符 |
| 58 | +- `__radd`: Python `+` 反向运算 |
| 59 | +- `__sub`: Python `-` 运算符 |
| 60 | +- `__rsub`: Python `-` 反向运算 |
| 61 | +- `__mul`: Python `*` 运算符 |
| 62 | +- `__rmul`: Python `*` 反向运算 |
| 63 | +- `__truediv`: Python `/` 运算符,这是 Python 的 truediv 操作符,它将确保发生整数真除法 |
| 64 | +- `__rtruediv`: Python `/` 反向运算 |
| 65 | +- `__floordiv`: Python `//` operator,这是 Python 的 floordiv 运算符,它将确保发生底除 |
| 66 | +- `__rfloordiv`: Python `//` 反向运算 |
| 67 | +- `__mod`: Python `%` 运算符 |
| 68 | +- `__rmod`: Python `%` 反向运算 |
| 69 | + |
| 70 | +## BETWEEN、IN、NOT IN |
| 71 | + |
| 72 | +!!! note |
| 73 | + |
| 74 | + 运算符需要多个值,且仅允许元组,列表,集合 |
| 75 | + |
| 76 | +```python |
| 77 | +# 获取年龄在 30 - 40 岁之间的员工 |
| 78 | +items = await item_crud.select_models( |
| 79 | + session=db, |
| 80 | + age__between=[30, 40], |
| 81 | +) |
| 82 | +``` |
| 83 | + |
| 84 | +## AND |
| 85 | + |
| 86 | +可以通过将多个过滤器链接在一起来实现 AND 子句 |
| 87 | + |
| 88 | +```python |
| 89 | +# 获取年龄在 30 以上,薪资大于 2w 的员工 |
| 90 | +items = await item_crud.select_models( |
| 91 | + session=db, |
| 92 | + age__gt=30, |
| 93 | + payroll__gt=20000, |
| 94 | +) |
| 95 | +``` |
| 96 | + |
| 97 | +## OR |
| 98 | + |
| 99 | +!!! note |
| 100 | + |
| 101 | + 每个键都应是库已支持的过滤器,仅允许字典 |
| 102 | + |
| 103 | +```python |
| 104 | +# 获取年龄在 40 岁以上或 30 岁以下的员工 |
| 105 | +items = await item_crud.select_models( |
| 106 | + session=db, |
| 107 | + age__or={'gt': 40, 'lt': 30}, |
| 108 | +) |
| 109 | +``` |
| 110 | + |
| 111 | +## 算数 |
| 112 | + |
| 113 | +!!! note |
| 114 | + |
| 115 | + 此过滤器必须传递字典,且字典结构必须为 `{'value': xxx, 'condition': {'已支持的过滤器': xxx}}` |
| 116 | + |
| 117 | + `value`:此值将与列值进行运算 |
| 118 | + |
| 119 | + `condition`:此值将作为运算后的比较值,比较条件取决于使用的过滤器 |
| 120 | + |
| 121 | +```python |
| 122 | +# 获取薪资打八折以后仍高于 15000 的员工 |
| 123 | +items = await item_crud.select_models( |
| 124 | + session=db, |
| 125 | + payroll__mul={'value': 0.8, 'condition': {'gt': 15000}}, |
| 126 | +) |
| 127 | +``` |
0 commit comments