我有一个表已经包含了一些数据。现在我想从csv文件上传新数据,并希望更新该表的某些先前值。我使用django 1.3和sqlite3作为数据库。但是我无法更新表格。
答案 0 :(得分:0)
如果您不想更改Primay键值或不向表中添加新对象(可能是旧信息的副本),那么您需要某种数据,可以将其用作数据库中的查找参数。
如果您有代表此数据的模型,那么使用
非常容易m = Model.objects.get(somecolumn = somedata)
m.someothervalue = someotherdata
m.save()
但是为什么还要包括django呢?如果您有CSV表,那么更新此信息实际上是编写查询的情况。像Excel和openoffice这样的程序使这很容易。 如果您已经有CSV格式的数据,那么只需将数据打开为电子表格并使用excels / openoffice的Concactenate函数创建更新查询
Update mytable set value1 = data1, value2 = data2 where somevalue = somedata;
如果您使用openoffice,那么openoffice有这个漂亮的Text to columns函数(在程序菜单中的数据下),它将concactenated值转换为字符串。然后你可以将这些字符串复制到命令提示符或phppgadmin并运行..瞧,你得到数据库中的更新数据。
编辑(回复你的评论。):
请注意:https://docs.djangoproject.com/en/dev/ref/models/querysets/#get-or-create
如果你想为此使用django,那么使用get_or_create。但是你需要记住,如果你在get_or_create方法中使用的任何参数已经改变,那么将创建新对象。这就是为什么我在帖子开头说,你需要一些不会改变的数据。
例如(取自上面的链接)
obj, created = Person.objects.get_or_create(first_name='John', last_name='Lennon',
defaults={'birthday': date(1940, 10, 9)})
第一次使用时,会创建新的obj(Person)。但如果第二次使用且日期已更改,则将创建具有相同名称和姓氏但新日期的新人。
所以为了避免这种情况,你仍然需要做类似
的事情obj.someothervalue = someotherdata
obj.save()
如果您想要对数据进行更多控制,那可能已经改变了。
艾伦。