簡體   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