转储,然后为 WagTail 加载一个 sqlite3 数据库

Dumping, then loading a sqlite3 DB for WagTail

我正在尝试复制生产数据库的内容,然后用于本地开发。我尝试使用 sqlite 的转储然后执行 cat dump.sql | sqlite3 db.sqlite3,但这只会打印出大量错误,例如:

Error: near line 3: table "django_migrations" already exists
Error: near line 4: UNIQUE constraint failed: django_migrations.id
Error: near line 5: UNIQUE constraint failed: django_migrations.id
Error: near line 6: UNIQUE constraint failed: django_migrations.id
Error: near line 7: UNIQUE constraint failed: django_migrations.id
Error: near line 8: UNIQUE constraint failed: django_migrations.id
Error: near line 9: UNIQUE constraint failed: django_migrations.id

我也尝试过使用 Django 自己的 dump/load 命令,但是当我这样做时./manage.py loaddata db.json 我遇到了很多错误:

Traceback (most recent call last):
  File "/Users/jack/dev/web_design/kaoru_wada/venv/lib/python3.5/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "/Users/jack/dev/web_design/kaoru_wada/venv/lib/python3.5/site-packages/django/db/backends/sqlite3/base.py", line 337, in execute
    return Database.Cursor.execute(self, query, params)
sqlite3.IntegrityError: UNIQUE constraint failed: django_content_type.app_label, django_content_type.model

即使我删除现有的本地数据库,运行 迁移,然后尝试将 dbdumps 导入新的本地数据库,我也会遇到这些错误。

关于如何复制数据库内容并成功导入它有什么想法吗?

您的 .sql 转储文件包含构建数据库表的信息以及填充它们的数据,因此不需要 运行 迁移作为一个单独的步骤 - 这只会重复过程的一部分(并在尝试创建已经存在的表时抛出错误)。

只需 运行 执行 cat dump.sql | sqlite3 db.sqlite3 步骤而不事先创建 db.sqlite3 文件,将为您提供一个完全填充的数据库,其状态与 运行 相同迁移。