Django开发之ORM批量操作
Posted fengzi-2016
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django开发之ORM批量操作相关的知识,希望对你有一定的参考价值。
版本
1 Python 3.8.2 2 Django 3.0.6
批量入库
场景: 前端页面通过 textarea 文本框提交一列多行数据到Django后台,后台通过ORM做入库操作
表名: TableName 字段名: table_column, status, job 等
需要两个“媒介”: 1. 一个列表(用作批量入库的“收纳盒”) 2. 一个方法 bulk_create(批量入库的“武器”)
1 ...省略... 2 3 if request.method == ‘POST‘: 4 datas = request.POST.get(‘datas‘) 5 if datas: 6 data_to_insert = [] 7 for s in datas.split(‘ ‘): 8 data_to_insert.append(TableName(table_column=s, status=‘ok‘, job=‘teacher‘)) 9 print(‘start insert...‘) 10 TableName.objects.bulk_create(data_to_insert) 11 12 ...省略...
批量更新
疑问:这是批量更新吗?!
场景:前端提交数据后,Django后台通过ORM实现批量更新
...省略... if request.method == ‘POST‘: update_data = request.POST.get(‘update_data‘) for i in json.loads(update_data): TableName.objects.filter(id=i[‘0‘]).update(status=i[‘1‘], job=i[‘2‘], comments=i[‘3‘])
...省略...
说明:
request.POST.get(‘update_data‘) 中的 update_data 为前端Ajax提交过来的data
批量更新必须使用一个字段作为 filter,然后再去更新。相当于SQL语句中的where
转换为SQL语句: UPDATE TableName SET status = ‘x‘, job = ‘y‘, comments = ‘z‘ WHERE id = ‘xx‘
聚合分组
场景: 统计每个类型的数量并统计出TOP 5
1 ORM 2 TableName.objects.values(‘job‘).annotate(jo=Count(‘job‘)).order_by(‘-jo‘) 3 4 mysql 5 SELECT job, COUNT(*) as num FROM app1_tablename GROUP BY job ORDER BY num desc
未完待续...
以上是关于Django开发之ORM批量操作的主要内容,如果未能解决你的问题,请参考以下文章