Model操作
1.create_table 生成物理表(可以同步执行)
Model.create_table(True)
2.insert 插入新数据
和create区别是,insert不返回模型实例,只返回id
mgr.execute(
Model.insert(name='jiojliower', sort=99999)
)
3.insert_many 批量插入
insert_many([data1, data2, data3.....]),返回插入的第一条数据的id
obj = await mgr.execute(
Model.insert_many([
dict(name='poiuj', sort=99997),
dict(name='oiuerte', sort=99996),
])
)
4.update 更新数据
返回实际更新的条数
obj = await mgr.execute(
School.update(
name='9809808'
)
)
5.replace 新增
新增一条数据,若违反索引或约束等,则替换数据
obj = await mgr.execute(
Model.replace(
name=‘12313189’
)
)
6.delete 删除
返回删除的条数
obj = await mgr.execute(
School.delete().where(
School.name=='12313189'
)
)
7.select 查询
返回实例对象迭代器
obj = await request.app.mgr.execute(
Model.select()
)
方法 含义
.in_(value) IN查找(与相同<<)。
.not_in(value) 不在查询中。
.is_null(is_null) 是NULL还是IS NOT NULL。接受布尔参数。
.contains(substr) 通配符搜索子字符串。
.startswith(prefix) 搜索以开头的值prefix。
.endswith(suffix) 搜索以结尾的值suffix。
.between(low, high) 在low和之间搜索值high。
.regexp(exp) 正则表达式匹配(区分大小写)。
.iregexp(exp) 正则表达式匹配(不区分大小写)。
.bin_and(value) 二进制AND。
.bin_or(value) 二进制或。
.concat(other) 使用串联两个字符串或对象||。
.distinct() 标记列以进行DISTINCT选择。
.collate(collation) 用给定的排序规则指定列。
.cast(type) 将列的值强制转换为给定的类型。
8.dicts 转字典
返回字典对象迭代器
obj = await mgr.execute(
School.select(School.id, School.name).where(School.id >= 90).dicts()
)
9.tuples 只返回值得元组迭代器
obj = await mgr.execute(
School.select(School.id, School.name).where(School.id >= 90).tuples()
)
10.join 连接查询
会一并查询school的所有字段,若只想查school的某个字段,可以用School.id等
连接方式有
JOIN.LEFT_OUTER = ‘LEFT OUTER JOIN’
JOIN.RIGHT_OUTER = ‘RIGHT OUTER JOIN’
JOIN.INNER = ‘INNER JOIN’
obj = await mgr.execute(
Class.select(Class.id, School).join(School, JOIN.LEFT_OUTER, on=(Class.school_id == School.id))
)
11.where 条件过滤
方法 意义
.in_(value) IN查找(与相同<<)。
.not_in(value) 不在查询中。
.is_null(is_null) 是NULL还是IS NOT NULL。接受布尔参数。
.contains(substr) 通配符搜索子字符串。
.startswith(prefix) 搜索以开头的值prefix。
.endswith(suffix) 搜索以结尾的值suffix。
.between(low, high) 在low和之间搜索值high。
.regexp(exp) 正则表达式匹配(区分大小写)。
.iregexp(exp) 正则表达式匹配(不区分大小写)。
.bin_and(value) 二进制AND。
.bin_or(value) 二进制或。
.concat(other) 使用串联两个字符串或对象||。
.distinct() 标记列以进行DISTINCT选择。
.collate(collation) 用给定的排序规则指定列。
.cast(type) 将列的值强制转换为给定的类型。
要使用逻辑运算符组合子句,请使用:
& 和
(User.is_active == True) & (User.is_admin == True)
| 或者
(User.is_admin) | (User.is_superuser)
~ 非
~(User.username.contains('admin'))
12.order_by 排序
desc 倒序(从大到小)
Rand(Mysql)和Random(Sqlite)随机排序
obj = await mgr.execute(
School.select().order_by(
School.id.desc(),
School.name
)
)
order_by(fn.Rand())
13.paginate 分页
obj = await mgr.execute(
School.select().paginate(page_id, page_size)
)
14.count 总条数
obj = await mgr.execute(
School.select().count()
)
15.having 聚合条件筛选
obj = await mgr.execute(
School.select().group_by(School.name).having(fn.COUNT(School.name) > 50)
)
16.row 原生语句
School.raw('SELECT * FROM my_table WHERE data = %s and id = %s', user_data, user_id)
17.union 合并
| UNION
UNION
& INTERSECT
- EXCEPT
mgr.execute(
SenderReceiverInfo.select(SenderReceiverInfo.info_id) | DeliveryOrder.select(DeliveryOrder.sender_info_id.alias('info_id'))
)
六、fn操作
1.Avg 平均值
2.Sum 和
3.Max 最大值
4.Min 最小值
5.Count 合计
6.Substr 切片
第几个开始,取几个,1是第一个
School.select(
).where(
fn.Substr(School.name, 1, 6) == 'zxcvbv'
)
七、Tuple 元组
from peewee import Tuple
School.select(
).where(
Tuple(School.id, School.name) == (9, 'jijio')
)