码迷,mamicode.com
首页 > 其他好文 > 详细

Django开发之ORM批量操作

时间:2020-06-04 14:08:56      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:eth   for   前端   uri   app   djang   start   status   nbsp   

版本

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(\n):
 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批量操作

标签:eth   for   前端   uri   app   djang   start   status   nbsp   

原文地址:https://www.cnblogs.com/fengzi-2016/p/13042104.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!