我一直在使用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.
这是我第一次这样做,而且我很难找到文档来弄清楚我做错了什么。有人可以提供建议吗?谢谢!
答案 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)
我们可以像下面这样
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
答案 3 :(得分:0)
针对那些仍然遇到此问题的人。
错误告诉您:
CommandError:安装固件“ MyTable”时出现问题:sql不是已知的序列化格式。
您可以将其视为:
sql 不是已知的序列化格式。
它将不接受任何不以.json
结尾的文件。
所以要解决您的问题,请使用以下命令:
$ python manage.py loaddata <your_dump_filename>.json