首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何清楚地批量更新django模型的所有对象,而无需在python中迭代它们?

如何清楚地批量更新django模型的所有对象,而无需在python中迭代它们?
EN

Stack Overflow用户
提问于 2013-09-04 12:17:23
回答 1查看 1K关注 0票数 1

基本上,如果不这样做,我们是否可以取得同样的结果:

代码语言:javascript
复制
from my_app import models
for prd,count in x.iteritems():
    models.AggregatedResult.objects.filter(product=prd).update(linked_epp_count=count)

?很明显,x是一个字典,包含与AggregatedResult的产品字段相同的键,“value”是我希望更新的计数。在小于15k行的测试表上运行需要超过2-3分钟,表的大小目前为200 K,预计将增长到100万。所以我需要帮助。

EN

回答 1

Stack Overflow用户

发布于 2013-09-04 14:01:36

最简单(但不是最安全)的方法是使用原始sql查询

类似于:

代码语言:javascript
复制
for prd,count in x.iteritems():
    from django.db import connection, transaction
    cursor = connection.cursor()

    query = """
        UPDATE {table} 
        set {column} = {value} 
        where {condition} = {condition_value}""".format(
        table=AggregatedResult._meta.db_table,
        condition='product',
        condition_value=prd,
        column='linked_epp_count',
        value=count
    )
    cursor.execute(query)
    transaction.commit_unless_managed()

警告:未经过测试,极易受到sql注入的影响。自担风险使用

另一种(更安全的)方法是首先将x的内容加载到临时表中,而不是只发出一个要更新的原始查询。假设x的临时表是temp_prod

代码语言:javascript
复制
update aggregated_result ar
set linked_epp_count=tp.count
from temp_prod tp
where ar.product = tp.product

如何将数据从x上传到临时表,这是我不太熟悉的事情,所以留给您。:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18613618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档