【问题标题】:migrating to mysql in django在 django 中迁移到 mysql
【发布时间】:2016-05-17 09:38:33
【问题描述】:

我想在 Django 中从 sqlite3 迁移到 MySQL。首先我使用了以下命令:

python manage.py dumpdata > datadump.json

然后我更改了我的 Django 应用程序的设置,并使用我的新 MySQL 数据库对其进行了配置。最后,我使用了以下命令:

python manage.py loaddata datadump.json

但我收到了这个错误:

integrityError:安装夹具时出现问题:表中的行 主键为“20”的“django_admin_log”具有无效的外键: django_admin_log.user_id 包含一个没有 auth_user.id 中对应的值。

【问题讨论】:

  • 正确检查您的 foreign_key 约束。

标签: python mysql django database sqlite


【解决方案1】:

您的数据存在一致性错误,django_admin_log 表引用了不存在的 auth_user。 sqlite 不强制外键约束,但 mysql 会。您需要修复数据,然后才能将其导入 mysql。

【讨论】:

  • 我应该如何解决这个问题有什么工具可以帮助我吗?
  • 从错误消息中,您可以尝试从 django_admin_log 行中删除 id 为 20 的行并重复迁移。您可以在 sqlite 数据库中执行此操作,也可以编辑 json 转储。您还可以使用SELECT id FROM django_admin_log WHERE user_id NOT IN (SELECT id FROM auth_user) 查找所有无效行
【解决方案2】:

我不得不将我的数据库从 postgres 移动到 MySql-Database。

这对我有用:

导出(旧机器):

python manage.py dumpdata --natural --all --indent=2 --exclude=sessions  --format=xml > dump.xml

进口(新机): (请注意,对于旧版本的 Django,您需要 syncdb 而不是 migrate)

manage.py migrate --no-initial-data

获取用于重置数据库的 SQL:

manage.py sqlflush

setting.py:

DATABASES = {
'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'asdf',
        'USER': 'asdf',
        'PASSWORD': 'asdf',
        'HOST': 'localhost',
    #IMPORTANT!!
    'OPTIONS': {
             "init_command": "SET foreign_key_checks = 0;",
        },
}

python manage.py loaddata dump.xml

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-30
    • 2018-10-11
    • 2017-02-03
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 2020-09-10
    • 2018-11-04
    相关资源
    最近更新 更多