[英]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.