Django Python数据库更新

时间:2015-02-12 14:07:08

标签: python django mongodb

我有一个使用mongo引擎的django模型。在模型中,

class MyMap(Document):
    name = StringField(required=True, primary_key=True,max_length=50,unique=True)
    cars = DictField()

如果我像这样更新数据库,它会在第一个条目的右边。有没有选项来执行dictfield的更新而不在模型之外进行更新?

x = MyMap(name="dave",cars={"ford":"abc"})
x.save()

x = MyMap(name="dave",cars={"mini":"abc"})
x.save()

谢谢,

4 个答案:

答案 0 :(得分:1)

如果您尝试更新cars属性而不覆盖现有信息,那么您可以执行以下操作:

x = MyMap(name="dave",cars={"ford":"abc"})
x.save()

x.cars.update({"mini":"abc"})
x.save()

答案 1 :(得分:0)

不确定我是否正确理解了“模型之外”的含义,但是你不能从数据库中获取文档并更新它然后保存它吗?

doc = MyMap.objects(name="dave").first()
if doc:
    doc.cars = {"mini":"abc"}
    doc.save()

答案 2 :(得分:0)

您可以获取该对象然后进行更新(这是最简单的方法):

x = MyMap.objects.get(name="dave")
x.cars = {"mini":"abc"}
x.save()

https://docs.djangoproject.com/en/1.7/topics/db/queries/#saving-changes-to-objects

您还可以使用update()

MyMap.objects.filter(name="dave").update(cars={"mini":"abc"})

https://docs.djangoproject.com/en/1.7/ref/models/querysets/#update

您还可以使用update_or_create()

x, created = MyMap.objects.update_or_create(name="dave", defaults={'cars': {"mini":"abc"}})

https://docs.djangoproject.com/en/1.7/ref/models/querysets/#update-or-create

答案 3 :(得分:0)

这是更新模型的最佳方式。见https://docs.djangoproject.com/en/1.7/ref/models/querysets/#get-or-create

obj, created = MyMap.objects.get_or_create(name="dave")
obj.cars = {"mini":"abc"}
obj.save()

这适用于创建和更新对象