Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Django-无法使loaddata正常工作_Sql_Json_Django_Default - Fatal编程技术网

Sql Django-无法使loaddata正常工作

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

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

首先,我尝试使用.sql文件。值得注意的是,这些表格非常简单;它们只有一个值“name”。我的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.
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文件引用了?您不需要删除重新创建数据库。只需立即执行转储数据(当然,如果它包含数据的话)。我只运行了上述所有三个命令,每个命令