如何让两个django项目共享相同的数据库
我需要让两个独立的Django项目共享相同的数据库。在project_1
我有模型创建对象,我需要使用project_2
(主要是图像)。如何让两个django项目共享相同的数据库
的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.pyDATABASES
指向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
)应该有你要使用的数据库相应的权限。或者你可以改用两个项目的同一个用户。
如果你想每个项目只有一个以上的数据库,你应该看看docs for multiple databases。
关于另一个问题,既然你分享数据,我想你也分享功能。举例来说,如果project_1_app1
和project_2_app1
做了相同(或相似)的事情,看起来它们可能是单一的reusable 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模块了解更多信息。
谢谢@alxs。我编辑了我的问题,以更好地解释我的需求。你能帮我设置数据库到相同的路径吗? – user123892
@ user123892我更新了您请求的额外信息的答案 – alxs
我收到了django.db.utils.ProgrammingError:当我尝试使用不同的用户和超级用户权限迁移第二个应用时,关系django_migrations的权限被拒绝 –
这些项目是否具有通用功能或应用程序? – devxplorer
https://docs.djangoproject.com/en/1.10/topics/db/multi-db/ – madzohan
看看[样板工程](https://github.com/devxplorer/django-multi-instances)我创建了特殊为你;)我建议你使用这种方法,因为你很可能会共享应用程序之间的项目。 – devxplorer