无法找到csv导入django模型的工作解决方案

时间:2016-02-11 08:06:19

标签: python django csv

这很麻烦,所以请耐心等待。

作为将更大的文件导入我的Django模型的前奏,我想首先使用csv import来创建较大文件中的模型所依赖的外键字段。这个csv正好是两行,即fk模型的一个实例的标题和数据。

这看起来很简单,我在这里和网上其他地方读到的所有帖子都让它看起来很简单。但不适合我。

以下是我尝试的内容:

  1. 我根据http://mitchfournier.com/2011/10/11/how-to-import-a-csv-or-tsv-file-into-a-django-model/编写了自己的脚本 然后我发现我必须使用Django.setup()。我得到的原始博文并没有提到这一点。它可能是在添加此要求之前编写的。无论如何,我现在必须使用Django.setup,因为这是一个独立的脚本'。我不断收到一些错误,比如
  2. (cannon)malikarumi@Tetuoan2:~/Projects/cannon$ python ./load_data_2.py Traceback (most recent call last): File "./load_data_2.py", line 3, in <module> import Django ImportError: No module named Django ImportError: No module named essell Traceback (most recent call last): File "./load_data_2.py", line 8, in <module> django.setup() NameError: name 'django' is not defined

    1. 我重构了代码以摆脱这些问题,只是遇到了新问题。
    2. 此博客文章的字段名称按索引编号列为行。所以当我最终得到它时,我得到了:

      File "/home/malikarumi/Projects/cannon/jamf/essell/management/commands/my_loaddata1.py", line 21, in handle jurisdiction.address = row[1] IndexError: list index out of range

      由于我只有两行,一个实例的标题和数据,我想到可能我需要列而不是行。但这是原始脚本的方式。所以这就把我带到csv上的官方文档,https://docs.python.org/2/library/csv.html,我很沮丧地看到没有按索引号使用行的例子。

      感到沮丧,我想知道一个自定义管理命令......

      1. 自定义django管理命令 (加农炮)malikarumi @ Tetuoan2:〜/ Projects / cannon / jamf $ python manage.py myloaddata3
      2. `Traceback(最近一次调用最后一次): ImportError:没有名为cannon.jamf.essell.models&#39;

        的模块

        我多次更改了导入,但是Python拒绝承认它们中的任何一个。显然这是因为它只进口一次。我尝试过imp.reload但是没有用。我关闭了终端并重新打开了,这没有用。我重新启动了计算机并且仍然无法正常工作。顺便说一下,这个脚本是基于Friendm1在how to import csv data into django models

        中的回答
        1. 我在Postgres看了COPY,但决定传递它,因为: a)它在ORM之外,并且 b)文档使它看起来像引用数据库,而不只是表格。

        2. 的django-csvimport 对于处于类似位置的所有人的警告,有很多类似的声音应用程序,但有些还没有维护多年。 Django-csvimport最近有更新,但文档很少。我试着像它告诉我的那样做,当然也有错误。然后我想到也许我应该为这件事运行startapp,即使指令没有说明这一点。它可能默默地假设我会知道,而不是完全依赖于所写的内容。但是当我尝试这个时,我得到了:

        3. (cannon)malikarumi@Tetuoan2:~/Projects/cannon/jamf$ python manage.py startapp csvimport

          CommandError: 'csvimport' conflicts with the name of an existing Python module and cannot be used as an app name. Please try another name. (cannon)malikarumi@Tetuoan2:~/Projects/cannon/jamf$ ls essell jamf manage.py Procfile README.md requirements.txt runtime.txt

          注意我在重命名后仍然出现此错误,然后删除了我手动创建的csvimport文件夹。我尝试将其重命名为csvimport2,但这将如何影响程序的其他部分?我不知道这个问题的答案的一个原因是因为,现在我有这个csvimport2应用程序,我在models.py中放了什么? 我应该为csvimport2运行迁移并制作表吗?显然,文档会说&#39;运行syncdb&#39;。但我没有申请迁移。&#39;即使在安装的应用程序中使用csvimport2。

          最后,我向你寻求帮助。

1 个答案:

答案 0 :(得分:0)

我找到了答案:csvkit。 http://csvkit.readthedocs.org/en/latest/index.html

它完成了我需要的一切(将csv转换为json)等等,它有很好的文档记录,并且目前已经维护。

然后我将它与Django fixtures和loaddata命令https://docs.djangoproject.com/en/1.8/howto/initial-data/配对,我很高兴回到业务中,压力水平大大降低。

仔细查看Django页面上的json示例,并按照该示例进行操作,否则会出现错误,但是它可以正常工作,还有什么可以要求的?