繁体   English   中英

在两个Django项目之间共享数据库时如何解决“表“auth_permission”已经存在”错误

[英]How to solve "table "auth_permission" already exists" error when the database is shared among two Django projects

这个问题中,我学习了如何让两个 Django 项目使用相同的数据库。 我有:

projects
  project_1
    settings.py
    ...
  project_2
    settings.py
    ...

# project_1/settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(PROJECT_ROOT, 'development.db'),
    },
}


# project_2/settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(
            os.path.dirname(os.path.dirname(PROJECT_ROOT)),
            'project_1',
            'development.db'
        ),
    },
}

project_2/ ,当我运行时:

python manage.py syncdb

我得到:

django.db.utils.OperationalError: table "auth_permission" already exists

我猜这是因为 python 在尝试添加共享数据库中已经存在的project_2表时失败。

如何仅将公共数据库中尚不存在的那些project_2表添加到共享数据库中?

编辑:在告诉 project_2/ 使用 project_1/ db 后,我运行了syncdb并得到现有表错误。 我没有迁移文件。 我应该在同步之前运行不同的命令吗?

您可以打开migrations文件并注释掉尝试创建表的 SQL。 然后再次运行迁移。

(另一种可能性是删除数据库中的表,但您会丢失表中的数据。)

如果您使用 django 版本 >1.7,您应该使用迁移( Django 迁移- 确保检查版本与您的匹配)然后您可以更一致地进行迁移(没有冲突)。 即使它们发生(但在非常特定的条件下),您也可以始终在第二台主机上进行“--fake”迁移

Django 1.8.15 for project_2/。 我刚刚检查了 project_1/ django 版本,它是 1.6。 我确信两个项目都使用相同的 django 版本。这是主要问题吗?

是的。 因为 django 1.6 和 django 1.8 使用不同的syncdb命令。 1.8 中的syncdbmigrate ,因此当您在 1.8 中执行syncdb ,您正在应用迁移,而不仅仅是创建表。 使用相同的 django 版本,问题应该可以解决。

暂无
暂无

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

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