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批量操作的主要内容,如果未能解决你的问题,请参考以下文章

Django ORM批量操作和foreign key

Django ORM 中的批量操作

Django之ORM操作

django 导入Excel文件 ORM 批量操作

Django基础之django ORM单表操作

Django基础之django ORM单表操作