【发布时间】:2010-11-03 11:37:45
【问题描述】:
我想编写一个 Python 脚本来将 CSV 文件的内容导入 Django 应用程序的数据库。因此,对于每个 CSV 记录,我创建一个模型实例,从解析的 CSV 行设置适当的值,然后在模型实例上调用 save。例如,见下文:
for row in dataReader:
person=Person()
person.name=row[0]
person.age=row[1]
person.save()
现在,假设名称字段在模型中被标记为唯一。处理正在导入的记录与数据库中已有记录具有相同名称值的情况的最佳方法是什么?在调用 save 之前我应该检查一下吗?如何?我应该捕获异常吗?代码会是什么样子?
编辑: 如果数据库中已经存在具有相同名称字段的记录,我仍然想更新其他字段。例如,如果我正在导入 Fred,43 并且数据库中已经有一条记录 Fred,42 它应该将 db 更新为 Fred,43。
编辑: 感谢所有的答案。 chefsmart 指出的这种方法是我认为我会采用的方法:
try:
obj = Person.objects.get(name=name)
except Person.DoesNotExist:
obj = Person()
obj.name = name
obj.age = age
obj.save()
【问题讨论】:
-
一个天真的解决方案是事先获取名称列表并检查:如果名称在 name_list:执行 save()。我不知道这是否是最好的。