gpt4 book ai didi

python - 如何让两个django项目共享同一个数据库

转载 作者:太空狗 更新时间:2023-10-29 22:29:09 27 4
gpt4 key购买 nike

我需要让两个独立的 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)都应该对您要使用的数据库具有适当的权限。或者您可以为两个项目使用相同的用户。

如果您希望每个项目拥有多个数据库,您应该查看 docs for multiple databases .

另一方面,既然你们共享数据,我想你们也共享功能。因此,例如,如果 project_1_app1project_2_app1 做相同(或相似)的事情,它们似乎可以改为单个 reusable app .

编辑

既然你用的是sqlite3,你应该保证你使用的路径是一样的。因此,假设 project_1project_2 是 sibling ,如下所示:

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模块了解更多信息。

关于python - 如何让两个django项目共享同一个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39774580/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com