猿问

如何在 django 的同一个应用程序中使用不同的数据库?

我有一个名为 xyz 的应用程序,该应用程序中有 2 个视图 view1.py 和 view2.py 我将路由器配置为

if model._meta.app_label == 'xyz'
    return database1

有没有办法从此应用程序“xyz”中选择不同的数据库。

我的意思是同一个应用程序中的两个不同的数据库。

有没有办法或者django首先允许这样做。


守候你守候我
浏览 295回答 1
1回答

慕容森

数据库相关东西的配置主要在 settings.py 文件中完成。因此,要将多个数据库添加到我们的 django 项目中,我们需要将它们添加到 DATABASES 字典中。这些设置进去 Settings.pyDATABASE_ROUTERS = ['path.to.DemoRouter']DATABASE_APPS_MAPPING = {'user_data': 'users_db',                        'customer_data':'customers_db'}DATABASES = {    'default': {        'ENGINE': 'django.db.backends.sqlite3',        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),    },    'users_db': {        'NAME': 'user_data',        'ENGINE': 'django.db.backends.postgresql',        'USER': 'postgres_user',        'PASSWORD': 'password'    },    'customers_db': {        'NAME': 'customer_data',        'ENGINE': 'django.db.backends.mysql',        'USER': 'mysql_cust',        'PASSWORD': 'root'    }}对于多个数据库,最好谈谈数据库路由器。默认路由方案确保如果未指定数据库,则所有查询都回退到默认数据库。数据库路由器默认为 []。把这个放进去 models.pyclass DemoRouter:    """    A router to control all database operations on models in the    user application.    """    def db_for_read(self, model, **hints):        """        Attempts to read user models go to users_db.        """        if model._meta.app_label == 'user_data':            return 'users_db'        elif model._meta.app_label == 'customer_data':            return 'customer_db'        return None    def db_for_write(self, model, **hints):        """        Attempts to write user models go to users_db.        """        if model._meta.app_label == 'user_data':            return 'users_db'        elif model._meta.app_label == 'customer_data':            return 'customer_db'        return None    def allow_relation(self, obj1, obj2, **hints):        """        Allow relations if a model in the user app is involved.        """        if obj1._meta.app_label == 'user_data' or \           obj2._meta.app_label == 'user_data':           return True        return None    def allow_migrate(self, db, app_label, model_name=None, **hints):        """        Make sure the auth app only appears in the 'users_db'        database.        """        if app_label == 'user_data':            return db == 'users_db'        return None相应的模型将被修改为class User(models.Model):    username = models.Charfield(ax_length=100)    . . .        class Meta:        app_label = 'user_data'class Customer(models.Model):    name = models.TextField(max_length=100)    . . .        class Meta:        app_label = 'customer_data'使用多个数据库时,很少有有用的命令。 $ ./manage.py migrate --database=users_db
随时随地看视频慕课网APP

相关分类

Python
我要回答