您好,匿名用户
随意问技术百科期待您的加入

求问一个 Django数据库ORM优化问题

0 投票

今天突然发现Django在update一个对象时,执行的sql语句是全属性更新,而不是按需(只更新变更了的属性)更新,请问有没有什么可以优化的办法?

以下代码是在django的shell环境里执行的:

>>> from django.db import connection
>>> print connection.queries
[]
>>> from myproj.msg import Message
>>> m = Message.objects.get(id=1)
>>> m.title = 'new msg title'
>>> m.save()
>>> print connection.queries
[{'time': '0.002', 'sql': u'SELECT `myproj_msg`.`id`, `myproj_msg`.`creator_id`,   `myproj_msg`.`title`, `myproj_msg`.`content` FROM `myproj_msg` WHERE `myproj_msg`.`id` = 1 '}, 
{'time': '0.001', 'sql': u'SELECT (1) AS `a` FROM `myproj_msg ` WHERE `myproj_msg`.`id` = 1  LIMIT 1'},
 {'time': '0.054', 'sql': u'UPDATE `myproj_msg` SET `creator_id` = 1, `title` = 'new msg title' , `content` = 'old content'  WHERE `myproj_msg`.`id` = 1 '}]

如上代码所示,其实只是像更新“消息”对象的标题,当django对整个对象的所有属性做了update操作,如果content内容非常大,可能会导致数据库瓶颈, 如果不想绕过django的ORM自己写sql,有没有办法解决这个问题?

用户头像 提问 2012年 12月1日 @ 随意问站长 上等兵 (310 威望)
分享到:

1个回答

0 投票
 
最佳答案

Message.objects.filter(id=1).update(title="new title")

多说一句,update能避免race-condition,正常情况下save()只需要在新建instance时用。

用户头像 回复 2012年 12月1日 @ Garen 上等兵 (269 威望)
选中 2012年 12月1日 @随意问站长
提一个问题:

相关问题

0 投票
1 回复 7 阅读
用户头像 提问 2014年 4月8日 @ Vladimir 上等兵 (275 威望)
0 投票
1 回复 31 阅读
用户头像 提问 2012年 12月1日 @ Hepheastus 上等兵 (182 威望)
0 投票
1 回复 31 阅读
用户头像 提问 2014年 2月17日 @ Scorpio 上等兵 (220 威望)
0 投票
1 回复 37 阅读
用户头像 提问 2013年 9月8日 @ Dr. Mundo 上等兵 (281 威望)
0 投票
1 回复 27 阅读
用户头像 提问 2014年 1月2日 @ Skarner 上等兵 (193 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...