簡體   English   中英

如何讓兩個django項目共享同一個數據庫

[英]How to make two django projects share the same database

我需要讓兩個獨立的 Django 項目共享同一個數據庫。 project_1我有模型創建我需要在project_2使用的對象(主要是圖像)。

project_1_2的樹結構為:

project_1/
    manage.py
    settings.py
    project_1_app1/
      ...
    ...

project_2/
    manage.py
    settings.py
    project_2_app1/
      ...
    ...

哪種方法最好?

編輯:我在我的開發環境中使用 sqlite3。

我想將我的兩個 django 項目保留為獨立項目(以便可以從各自的存儲庫安全地升級)。

# in project_1/settings.py
import os

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
..

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(PROJECT_ROOT, 'development.db'),
    },
}
...
# in project_2/settings.py
import os

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
..

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

這樣,每個項目都有自己的development.db (我需要分享的那個):

project_1/development.db 
project_2/development.db

但我想我需要做更多的事情來讓它共享(和獨特)。 對我來說最好的是將development.db保留在project_1/ 路徑,從而將project_2/settings.py DATABASES設置為指向project_1/development.db

您可以簡單地在 settings.py 中的DATABASES中定義相同的數據庫。 所以,如果你的數據庫是 PostgreSQL,你可以這樣做:

# in project_1/settings.py

DATABASES = {
    'default': {
        'NAME': 'common_db',
        'ENGINE': 'django.db.backends.postgresql',
        'USER': 'project_1_user',
        'PASSWORD': 'strong_password_1'
    },
}

# in project_2/settings.py

DATABASES = {
    'default': {
        'NAME': 'common_db',
        'ENGINE': 'django.db.backends.postgresql',
        'USER': 'project_2_user',
        'PASSWORD': 'strong_password_2'
    },
}

請注意,兩個數據庫用戶( project_1_userproject_2_user )都應該對您希望使用的數據庫具有適當的權限。 或者,您可以為兩個項目使用相同的用戶。

如果您希望每個項目擁有多個數據庫,您應該查看多個數據庫文檔

另一方面,由於您共享數據,我猜您也共享功能。 因此,例如,如果project_1_app1project_2_app1做相同(或相似)的事情,它們似乎可以改為單個可重用的 app

編輯

由於您使用sqlite3,您應該確保您使用的路徑相同。 因此,假設project_1project_2是兄弟姐妹,如下所示:

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顯然依賴於project_1的數據庫。

無論如何,也許您還應該查看os.path模塊以獲取更多信息。

您只需要在類 meta 中的模型中聲明屬性 db_table,其名稱與 app + 模型(由 Django 自動生成)的名稱不同,這兩個項目需要相同的模型。 在運行 makemigrations 和 migrate 之前。

class MyModel(models.Model):
    class Meta:
        db_table = 'MyModel'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM