Django - 无法使loaddata工作

时间:2014-04-11 15:41:12

标签: sql json django default

我一直在使用Django数据库一段时间没有任何重大问题。今天我需要第一次为几个表设置默认值。我在顶级Django目录中创建了一个fixtures目录。然后我创建了默认值的文件。但是,我一直收到错误消息,我不知道为什么。

首先我尝试使用.sql文件。值得注意的是,这些表非常简单;他们只有一个值,“名字”。我的SQL文件看起来像这样:

INSERT INTO MyTable (name) VALUES ('Default');

我将其保存为MyTable.sql。当我运行命令python manage.py loaddata fixtures/MyTable.sql时,我收到此错误消息:

CommandError: Problem installing fixture 'MyTable': sql is not a known serialization format.

(注意:我也试过没有灯具/部件,对于上面的例子和下一个例子,得到了相同的结果)。

我问我的项目负责人,他说他不认为SQL文件可以用于此。所以,我尝试了JSON文件。我的MyTable.json看起来像这样: [ { "model": "mydatabase.MyTable", "pk": 1, "fields": { "name": "Default" } } ]

我会非常坦率地承认我之前从未使用过JSON,只是在网络开发中,所以我不知道这个问题是否可能是我在这里做错了。我尝试将其基于我找到的here格式。当我再次通过loaddata函数运行它时,我收到此错误消息:

C:\Python27\lib\site-packages\django-1.6.1-py2.7.egg\django\core\management\commands\loaddata.py:216: UserWarning: No fixture named 'fixtures/MyTable' found.

这是我第一次这样做,而且我很难找到文档来弄清楚我做错了什么。有人可以提供建议吗?谢谢!

4 个答案:

答案 0 :(得分:2)

要创建fixture文件,请从空数据库开始,然后使用djanog-admin或django shell或甚至纯SQL将一些数据添加到数据库。之后你可以做一个


python manage.py dumpdata # to dump all your data, or 
python manage.py dumpdata app_name # to dump all data of a specific app, or 
python manage.py dumpdata app_name.model_name # to dump all data of a specific model

上面会将数据打印到你的标准输出。为了将其写入文件,请使用重定向(>),例如

python manage.py dumpdata auth.User > user_fixture.json

更新:我刚看到你正在使用Windows - 记得使用反斜杠(\)加载你的灯具。

答案 1 :(得分:0)

至于我,问题是输出文件的后缀。

python manage.py dumpdata -o my_dump
python manage.py loaddata < my_dump # it fails
# change the file name my_dump to my_dump.json
python manage.py loaddata < my_dump.json  # it works

<小时/> 所以,我猜dumpdata隐式使用json作为输出格式。虽然loaddata需要文件名后缀的格式提示。

答案 2 :(得分:0)

我们可以像下面这样

models.py

from django import models

class Model_Name(models.Model):
    name = models.CharField(max_length=50)

    def __str__(self):
        return self.name

固定装置

[
  {
    "model": "app_name.model_name",
    "pk": 1,
    "fields": {
        "name": "My app name"
    }
  }
]

命令

./manage.py loaddata app_name/fixtures/model_name.json

输出:从1个灯具安装了1个对象

答案 3 :(得分:0)

针对那些仍然遇到此问题的人。

错误告诉您:

  

CommandError:安装固件“ MyTable”时出现问题:sql不是已知的序列化格式。

您可以将其视为:

  

sql 不是已知的序列化格式。

它将不接受任何不以.json结尾的文件。

所以要解决您的问题,请使用以下命令:

$ python manage.py loaddata <your_dump_filename>.json