简体   繁体   English

Django 无法加载数据并出现反序列化错误

[英]Django fails to loaddata with deserialization error

I am running Wagtail which runs on django and when running the dumpdata the following occurs我正在运行在 django 上运行的dumpdata ,并且在运行转储数据时会发生以下情况

python manage.py dumpdata --indent 2 --output dumps.json
CommandError: Unable to serialize database: no such table: wagtailimages_uploadedimage

After that I delete the sqlite database and remove the migrations from the apps migrations directory so I can have an empty database and test the dumped data.之后,我删除 sqlite 数据库并从应用程序migrations目录中删除迁移,这样我就可以拥有一个空数据库并测试转储的数据。 After running migrate I execute loaddata dump1.json and the following error comes up运行migrate后,我执行loaddata dump1.json并出现以下错误

Tracking file by folder pattern:  migrations
Traceback (most recent call last):
  File "/home/user/Desktop/projects/mytestwebapp/venv/lib/python3.8/site-packages/django/core/serializers/json.py", line 68, in Deserializer
    objects = json.loads(stream_or_string)
  File "/usr/lib/python3.8/json/__init__.py", line 357, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.8/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.8/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/opt/pycharm-professional/plugins/python/helpers/pycharm/django_manage.py", line 52, in <module>
    run_command()
  File "/opt/pycharm-professional/plugins/python/helpers/pycharm/django_manage.py", line 46, in run_command
    run_module(manage_file, None, '__main__', True)
  File "/usr/lib/python3.8/runpy.py", line 207, in run_module
    return _run_module_code(code, init_globals, run_name, mod_spec)
  File "/usr/lib/python3.8/runpy.py", line 97, in _run_module_code
    _run_code(code, mod_globals, init_globals,
  File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/home/user/Desktop/projects/mytestwebapp/manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/home/user/Desktop/projects/mytestwebapp/venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/home/user/Desktop/projects/mytestwebapp/venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/user/Desktop/projects/mytestwebapp/venv/lib/python3.8/site-packages/django/core/management/base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/user/Desktop/projects/mytestwebapp/venv/lib/python3.8/site-packages/django/core/management/base.py", line 364, in execute
    output = self.handle(*args, **options)
  File "/home/user/Desktop/projects/mytestwebapp/venv/lib/python3.8/site-packages/django/core/management/commands/loaddata.py", line 72, in handle
    self.loaddata(fixture_labels)
  File "/home/user/Desktop/projects/mytestwebapp/venv/lib/python3.8/site-packages/django/core/management/commands/loaddata.py", line 114, in loaddata
    self.load_label(fixture_label)
  File "/home/user/Desktop/projects/mytestwebapp/venv/lib/python3.8/site-packages/django/core/management/commands/loaddata.py", line 172, in load_label
    for obj in objects:
  File "/home/user/Desktop/projects/mytestwebapp/venv/lib/python3.8/site-packages/django/core/serializers/json.py", line 73, in Deserializer
    raise DeserializationError() from exc
django.core.serializers.base.DeserializationError: Problem installing fixture '/home/user/Desktop/projects/mytestwebapp/dump1.json': 

I have tried also to exclude some of the things i dont need while dumping, using the following我还尝试使用以下方法排除一些我在倾倒时不需要的东西

dumpdata --natural-foreign --indent 2 -e contenttypes -e auth.permission -e wagtailcore.groupcollectionpermission -e wagtailcore.grouppagepermission -e wagtailimages.rendition -e sessions > dump1.json

But it didnt make any difference.但它没有任何区别。

The application is a simple blog following the demo shown here .该应用程序是一个简单的博客,遵循 此处显示的演示。

use --output instead of > to avoid sending console(stdout) debugging info to your dumped data, also exclude the irrelevant models使用--output代替>以避免将控制台(stdout)调试信息发送到您的转储数据,同时排除不相关的模型

python manage.py dumpdata --natural-foreign --indent 2 -e contenttypes -e auth.permission -e wagtailcore.groupcollectionpermission -e wagtailcore.grouppagepermission -e wagtailimages.rendition -e sessions -e wagtailimages.uploadedimage --output dumps.json

Based on your output, the dumped data is empty thus it throws the following error.根据您的 output,转储的数据为空,因此会引发以下错误。

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Ways to dump your data:转储数据的方法:

  1. Drop your database by deleting your sqlite database file通过删除 sqlite 数据库文件来删除数据库
  2. Delete your migrations folder删除您的迁移文件夹
  3. python manage.py makemigrations
  4. python manage.py migrate
  5. Try add some sample data by creating a user or other data尝试通过创建用户或其他数据添加一些示例数据
  6. Run dump data again python manage.py dumpdata -output my_dumps.json再次运行转储数据python manage.py dumpdata -output my_dumps.json

Then, check the my_dumps.json file, if there are some data inside, then you can try load your data using python manage.py loaddata my_dumps.json然后,检查 my_dumps.json 文件,如果里面有一些数据,那么你可以尝试使用python manage.py loaddata my_dumps.json加载数据

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM