【问题标题】:Django ORM to add data into existing JSONb filed.Django ORM 将数据添加到现有的 JSONb 文件中。
【发布时间】:2016-04-22 07:08:07
【问题描述】:

我的数据库中已经有如下数据

id   |    updation_track
-----|-------------------------------
1    |   {'date1':'piyush','date2':'rakesh'}
     |
2    |   {'date1':'Neha'}

我想使用 django orm 添加更新轨道

models.objects.filter(id=1).add('updation_track':{'date3':'Rahul'})

我知道这是错误的查询,但我想实现这样的目标,这样我的输出应该如下:

 id  |    updation_track
-----|-------------------------------
1    |   {'date1':'piyush','date2':'rakesh','date3':'Rahul'}
     |
2    |   {'date1':'Neha'}

我正在使用 django 1.9 和 postgres 版本 9.4。 谢谢!!

【问题讨论】:

    标签: python django postgresql django-orm


    【解决方案1】:

    我不知道是否有像 update() 这样的单行,因为您需要检索和修改,但下面应该这样做。

    for obj in models.objects.filter(id=1).all(): 
        # assuming a more complicated filer in reality or just use get()
        obj.updation_track['date3'] = 'Rahul'
        obj.save()
    

    有一些原始的“sql”可以做到这一点,但我认为 orm 没有生成它的方法。

    【讨论】:

    • 怎么失败了?
    • nephlm 说 TypeError: 'models' object is not iterable
    • 哎呀。忘记了all()
    【解决方案2】:

    “updation_track”是 JSON 字段吗?如果是这样,您可能需要检查 JSON 字段上的 Django documentation

    对于更新这些字段,我没有尝试过,但我的猜测是:

    models.objects.filter(id=1).update(updation_track = reduce(lambda x,y: dict(x, **y), (F('updation_track'), {'date3':'Rahul'})))
    

    由于 JSON 字段的作用类似于 python 中的字典,因此希望它可以工作。

    【讨论】:

    • Mehmet Sencer 出现 SyntaxError 错误:关键字不能是表达式
    猜你喜欢
    • 1970-01-01
    • 2014-02-21
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 2018-11-20
    • 2019-02-23
    相关资源
    最近更新 更多