Python 如何使两个django项目共享同一个数据库
我需要使两个单独的Django项目共享同一个数据库。在Python 如何使两个django项目共享同一个数据库,python,django,Python,Django,我需要使两个单独的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/ ... ...
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项目作为独立的项目(这样两个项目都可以从各自的存储库安全地升级)
这样,每个项目都有自己的development.db
(我需要共享的项目):
但我想我需要做更多的事情来让它共享(和独特)。
对我来说最好的方法是将
development.db
保持在project\u 1/路径上,从而将project\u 2/settings.py数据库设置为指向project\u 1/development.db。您可以在settings.py中的数据库中定义相同的数据库。因此,如果您的数据库是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\u 1\u user
和project\u 2\u user
)都应该对要使用的数据库具有相应的权限。或者您可以为两个项目使用相同的用户
如果您希望每个项目都有不止一个数据库,那么应该查看
另一方面,由于您共享数据,我猜您也共享功能。例如,如果project_1_app1
和project_2_app1
做了相同(或类似)的事情,那么它们似乎可以是一个单一的
编辑
由于使用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'
),
},
}
这将给出您要求的结构。但是请注意,这些项目并非都是“独立的”<代码>项目2
显然依赖于项目1
的数据库
在任何情况下,也许您也应该查看模块以了解更多信息。您只需要在meta类的模型中声明属性db_表,其名称与app+model(由Django自动生成)的名称不同。两个项目需要相同的模型。在运行之前,进行makemigrations和migrate
class MyModel(models.Model):
class Meta:
db_table = 'MyModel'
这些项目是否具有通用功能或应用程序?请看我为您创建的专用程序;)我建议您使用这种方法,因为您很可能会在项目之间共享应用程序。谢谢您的评论。这两个项目不共享功能或应用程序,我需要将它们作为仅共享数据库的独立项目保留。我在编辑中更好地解释了我的需求。谢谢@alxs。我编辑了我的问题,以便更好地解释我的需求。您能帮我将数据库设置为同一路径吗?@user123892我用您请求的额外信息更新了答案。我正在获取django.db.utils.ProgrammingError:当我尝试使用其他用户和超级用户迁移第二个应用时,关系django_迁移的权限被拒绝privileges@alxs如何管理公用服务器的迁移数据库例如,我在projects_1中几乎没有迁移,我是否必须手动复制projects_2中的模型更改并运行迁移?有更好的方法吗?@nimeshkiranverma据我所知,你的每个项目中都有两个不同的应用程序副本。相反,您应该尝试让两个项目都使用一个“存在”在两个项目都可以访问的公共目录中的应用程序(如virtualenv)。正如我在上面的回答中提到的,你应该检查一下有关相关记忆的文档
# 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'
),
},
}
class MyModel(models.Model):
class Meta:
db_table = 'MyModel'