Sql Django-无法使loaddata正常工作
我使用Django数据库已经有一段时间了,没有任何重大问题。今天,我第一次需要为一些表设置默认值。我在顶级Django目录中创建了fixtures目录。然后我为默认值创建了文件。然而,我不断收到错误消息,我不知道为什么 首先,我尝试使用.sql文件。值得注意的是,这些表格非常简单;它们只有一个值“name”。我的SQL文件如下所示:Sql Django-无法使loaddata正常工作,sql,json,django,default,Sql,Json,Django,Default,我使用Django数据库已经有一段时间了,没有任何重大问题。今天,我第一次需要为一些表设置默认值。我在顶级Django目录中创建了fixtures目录。然后我为默认值创建了文件。然而,我不断收到错误消息,我不知道为什么 首先,我尝试使用.sql文件。值得注意的是,这些表格非常简单;它们只有一个值“name”。我的SQL文件如下所示: INSERT INTO MyTable (name) VALUES ('Default'); 我将其保存为MyTable.sql。当我运行命令python man
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.
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.
(注意:对于上一个示例和下一个示例,我也尝试了不使用夹具/零件的情况,得到了相同的结果)
我问我的项目负责人,他说他不认为SQL文件可以用于此。所以,我尝试了JSON文件。我的MyTable.json
如下所示:
[
{
“模型”:“mydatabase.MyTable”,
"pk":1,,
“字段”:{
“名称”:“默认值”
}
}
]
我要坦率地承认,我以前从未在这种环境下使用过JSON,只在web开发中使用过,所以我不知道这个问题是否是我在这里做错了什么。我试图以我找到的格式为基础。当我再次通过loaddata函数运行此命令时,收到以下错误消息:
CommandError: Problem installing fixture 'MyTable': sql is not a known serialization format.
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.
这是我第一次这样做,我很难找到文档来找出我做错了什么。有谁能提供建议吗?谢谢 要创建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#转储所有数据,或 python manage.py dumpdata app_name#转储特定应用程序的所有数据,或 python manage.py dumpdata app_name.model_name#转储特定模型的所有数据 以上内容将把数据打印到您的标准输出。例如,为了将其写入文件,请使用重定向(>) python manage.py dumpdata auth.User > user_fixture.json python manage.py dumpdata auth.User>User_fixture.json
更新:我刚刚看到您正在使用Windows--请记住使用反斜杠(
\
)加载设备 要创建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#转储所有数据,或
python manage.py dumpdata app_name#转储特定应用程序的所有数据,或
python manage.py dumpdata app_name.model_name#转储特定模型的所有数据
以上内容将把数据打印到您的标准输出。例如,为了将其写入文件,请使用重定向(>)
python manage.py dumpdata auth.User > user_fixture.json
python manage.py dumpdata auth.User>User_fixture.json
更新:我刚刚看到您正在使用Windows--请记住使用反斜杠(
\
)加载设备 至于我,问题是输出文件的后缀
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
python manage.py dumpdata-o my_dump
python manage.py loaddata
因此,我猜
dumpdata
隐式地使用json
作为输出格式。虽然loaddata
需要来自文件名后缀的格式提示。对于我来说,问题是输出文件的后缀
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
python manage.py dumpdata-o my_dump
python manage.py loaddata
因此,我猜
dumpdata
隐式地使用json
作为输出格式。而loaddata
需要来自文件名后缀的格式提示。我们可以像下面这样做
models.py
固定装置
命令
输出:从1个夹具安装1个对象我们可以按如下方式执行此操作 models.py 固定装置 命令
输出:为仍有此问题的用户从1个夹具安装1个对象 错误告诉您: CommandError:安装装置“MyTable”时出现问题:sql不是已知的序列化格式 你可以把它看作: sql不是已知的序列化格式 它将不接受任何不以
.json
结尾的文件
因此,要解决您的问题,请使用以下命令:
$ python manage.py loaddata <your_dump_filename>.json
$python manage.py loaddata.json
适用于仍有此问题的人
错误告诉您:
CommandError:安装装置“MyTable”时出现问题:sql不是已知的序列化格式
你可以把它看作:
sql不是已知的序列化格式
它将不接受任何不以.json
结尾的文件
因此,要解决您的问题,请使用以下命令:
$ python manage.py loaddata <your_dump_filename>.json
$python manage.py loaddata.json
删除并重新创建数据库以使其为空后,是否需要运行syncdb或任何迁移来重新创建sql文件所引用的表?您不需要删除重新创建数据库的命令。现在就做一个dumpdata(当然,如果它包含数据的话)。我只是运行了上面所有三个命令,每次它返回[]
,但当我在loaddata出现相同错误后再次尝试时:(然后尝试向数据库添加一些数据(并执行syncdb和迁移)首先,然后尝试运行python manage.py dumpdata
以检查是否输出了某些内容。当我通过正在处理这些数据库的程序手动添加值并运行该值时,它会显示在我删除并重新创建数据库以空开始后,我是否需要运行syncdb或任何迁移来重新创建需要的表sql文件引用了?您不需要删除重新创建数据库。只需立即执行转储数据(当然,如果它包含数据的话)。我只运行了上述所有三个命令,每个命令