Django中不同应用的不同数据库[已关闭]

i86rm4rw  于 2022-12-20  发布在  Go
关注(0)|答案(1)|浏览(103)

很难判断此处所问的问题。此问题模棱两可、模糊不清、不完整、过于宽泛或过于修辞,无法以其当前形式合理地回答。若要获得澄清此问题以便重新打开的帮助,请单击visit the help center
10年前关闭了。
我的Django站点中有多个应用程序:* 主站点 博客 * 和 * 教程 *。
我可以在不同的Django应用中使用不同的数据库(例如PostgreSQL,MySQL)吗?

e4yzc0pl

e4yzc0pl1#

下面是你必须要做的事情。
1.更新要使用的数据库的设置。

    • 一月一日**
DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': '/var/db/projectdb'
}
'db_app1': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': '/var/db/app1db'
}
'db_app2': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': '/var/db/app2db'
}

1.对于每个数据库,实现一个数据库路由器,它将适当地路由查询。在您的情况下,在每个应用程序中实现。注意,这或多或少取自django文档。

    • dbRouter.py**(放在"app1"文件夹中):
# DB router for app1
class App1DBRouter(object):
        """
    A router to control db operations
    """
    route_app_labels = {'app1'}
    db_name = 'db_app1'

    def db_for_read(self, model, **hints):
        """
        Attempts to read auth and contenttypes models go to self.db_name.
        """
        if model._meta.app_label in self.route_app_labels:
            return self.db_name
        return None

    def db_for_write(self, model, **hints):
        """
        Attempts to write auth and contenttypes models go to self.db_name.
        """
        if model._meta.app_label in self.route_app_labels:
            return self.db_name
        return None

    def allow_relation(self, obj1, obj2, **hints):
        """
        Allow relations if a model in the auth or contenttypes apps is
        involved.
        """
        if (
            obj1._meta.app_label in self.route_app_labels or
            obj2._meta.app_label in self.route_app_labels
        ):
           return True
        return None

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        """
        Make sure the auth and contenttypes apps only appear in the
        self.db_name database.
        """
        if app_label in self.route_app_labels:
            return db == self.db_name
        return None
  1. Update DATABASE_ROUTERS in settings.py
    • 一米三米一x**
DATABASE_ROUTERS = ['app1.dbRouter.App1DBRouter', 'app2.dbRouter.App2DBRouter']

相关问题