Django:导入CSV文件并正确处理唯一值的冲突

Fun*_*der 1 python database django

我想编写一个Python脚本,将CSV文件的内容导入Django应用程序的数据库.因此,对于每个CSV记录,我创建了我的模型的实例,从解析的CSV行设置适当的值,并在模型实例上调用save.例如,见下文:

for row in dataReader:
    person=Person()
    person.name=row[0]
    person.age=row[1]
    person.save()
Run Code Online (Sandbox Code Playgroud)

现在,假设名称Field在模型中标记为唯一.处理导入记录的名称值与数据库中已存在的名称值相同的最佳方法是什么?在致电保存之前我应该​​检查一下吗?怎么样?我应该抓一个例外吗?代码会是什么样的?

编辑: 如果数据库中已存在具有相同名称字段的记录,我仍然希望更新其他字段.例如,如果我导入Fred,43并且已经有记录Fred,则数据库中有42,它应该将数据库更新为Fred,43.

编辑: 谢谢你的所有答案.chefsmart指出的这种方法是我认为我会选择的方法:

try:
    obj = Person.objects.get(name=name)
except Person.DoesNotExist:
    obj = Person()
    obj.name = name
obj.age = age
obj.save()
Run Code Online (Sandbox Code Playgroud)

mou*_*uad 5

我非常喜欢的Django orm函数之一是get_or_create()

所以我建议你这样做:

for row in dataReader:
    person_record, created = person.get_or_create(name=row[0], age=row[1])
Run Code Online (Sandbox Code Playgroud)

如果您想要更改旧记录person_record或检查记录是否已创建 if created:并按照您的要求执行操作,您可以进行检查.

希望这会有所帮助