[英]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 中的syncdb
是migrate
,因此当您在 1.8 中执行syncdb
,您正在应用迁移,而不仅仅是创建表。 使用相同的 django 版本,问题应该可以解决。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.