【问题标题】:Django + MySQL : Round Robin Update of Same Table ColumnsDjango + MySQL:相同表列的循环更新
【发布时间】:2015-05-14 09:26:34
【问题描述】:

我的模型有点像

Spot 
    spot_1 = 1/0
    spot_2 = 1/0
    spot_3 = 1/0
    spot_4 = 1/0
    spot_5 = 1/0
    spot_6 = 1/0

有点像循环数据库,假设spot_1 代表当前月份,spot_2 代表上个月,依此类推。所以如果当前月份是六月,那么

Jun  = spot_1  
May  = spot_2  
Apr  = spot_3  
Mar  = spot_4  
Feb  = spot_5  
Jan  = spot_6  

所以在 6 月底和 7 月初,这将表示为

July = spot_1  
Jun  = spot_2  
May  = spot_3  
Apr  = spot_4  
Mar  = spot_5  
Feb  = spot_6  

所以价值观也应该被继承。目前,我正在遍历完整的 QuerySet 并使值向前移动。

如何使用 Single update() 语句来实现?

【问题讨论】:

    标签: python mysql django orm


    【解决方案1】:

    使用F 表达式:

    from django.db.models import F
    
    Spot.objects.all().update(spot_2=F('spot_1'), spot_3=F('spot_2'), ...)
    

    【讨论】:

    • MySQL 原始查询应如下所示 update spot set spot_2=spot_1, spot_3=spot_2 where 1 F() 表达式如何?
    • 差不多:update spot set spot_2=spot.spot_1, spot_3=spot.spot_2
    • 我这样做了,但是以相反的顺序Spot.objects.all().update(spot_6=F('spot_5'), spot_5=F('spot_4'), ...) 发生的事情是,所有spots 都被latest spot 值填充?
    • 我想我必须循环并一次更新一个点。从最大点开始循环到最小点。这不是看起来很酷的东西,但确实有效。
    • 我还有一个问题,关于交易,如果你能提供一些见解,我无法理解它stackoverflow.com/questions/28992662/…
    猜你喜欢
    • 2014-05-20
    • 2020-11-25
    • 2017-07-19
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 2013-05-01
    相关资源
    最近更新 更多