python - Django get_or_create 返回模型。导入 CSV 时不存在

标签 python django csv

我花了很多时间来解决这个问题。我只是尝试使用 Python 的 csv 模块和 Django 的 get_or_create() 导入 CSV 文件。

这是我的简单代码(基于 this 代码):

import csv
from .models import Person

def import_data():
    with open('/path/to/csv/people_list.csv') as f:
           reader = csv.reader(f)
           for row in reader:
               _, created = Person.objects.get_or_create(
                   name=row[0],
                   p_id=row[1],
                   current_status=row[2],
                   )

当我在 shell 上运行 import_data() 时出现以下错误

peoplelisting.models.DoesNotExist: Person matching query does not exist.

是的,这个特定的人不存在,但这不是使用 get_or_create() 的全部意义吗?如果不存在,创建它?

最佳答案

经过一番折腾,最终发现问题出在:

我的 csv 还包含一个我没有忽略的标题行。我原以为我会继续零敲碎打,只有在我让 csv 导入工作后才会忽略 header 但是 header 本身造成了问题(感谢 this 帖子(间接)帮了大忙)。 header 中的值与模式(max_length 等)不匹配,这就是 Person matching query does not exist 所指的内容。忽略标题使其工作。不过,我只是希望错误消息更具描述性。希望它能帮助其他人节省我花在调试一件简单事情上的时间。这是正确的代码:

import csv
from .models import Person

def import_data():
    with open('/path/to/csv/people_list.csv') as f:
           reader = csv.reader(f)
           for row in reader:
              if row[0] != 'Person_name': #where Person_name is first column's name
                 _, created = Org.objects.get_or_create(
                     name=row[0],
                     p_id=row[1],
                     current_status=row[2],
                     )

关于python - Django get_or_create 返回模型。导入 CSV 时不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43114679/

相关文章:

python - 如何在 pytest config [pytest_addoption] 中指定多个选项

python - 从 Python 列表中评估和删除重复的字典

python - 是否有一种有效的方法来过滤并将函数应用于该数据集?

jquery - 在同一模板 django 中插入/删除发布请求

csv - 使用 bash 或 awk 打乱大型 csv 文件的行和列

java - 以制表符作为引号字符的 CSV

javascript - 在使用 python 请求抓取之前等待网页完全加载

python - 如何使用 django-authopenid 设置默认组?

django - 模板中 for 循环的迭代次数

java - 将时间和日期转换为相对时间(CSV 处理)