[英]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_user
和project_2_user
)都應該對您希望使用的數據庫具有適當的權限。 或者,您可以為兩個項目使用相同的用戶。
如果您希望每個項目擁有多個數據庫,您應該查看多個數據庫的文檔。
另一方面,由於您共享數據,我猜您也共享功能。 因此,例如,如果project_1_app1
和project_2_app1
做相同(或相似)的事情,它們似乎可以改為單個可重用的 app 。
編輯
由於您使用sqlite3,您應該確保您使用的路徑相同。 因此,假設project_1
和project_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.