zoukankan      html  css  js  c++  java
  • django 多数据库使用配置

     

    datebase_router.py# database_router.from django.conf import settings

    DATABASE_MAPPING = settings.DATABASE_APPS_MAPPING


    class DatabaseAppsRouter(object):
    """
    A router to control all database operations on models for different
    databases.

    In case an app is not set in settings.DATABASE_APPS_MAPPING, the router
    will fallback to the `default` database.

    Settings example:

    DATABASE_APPS_MAPPING = {'app1': 'db1', 'app2': 'db2'}
    """

    def db_for_read(self, model, **hints):
    """"Point all read operations to the specific database."""
    if model._meta.app_label in DATABASE_MAPPING:
    return DATABASE_MAPPING[model._meta.app_label]
    return None

    def db_for_write(self, model, **hints):
    """Point all write operations to the specific database."""
    if model._meta.app_label in DATABASE_MAPPING:
    return DATABASE_MAPPING[model._meta.app_label]
    return None

    def allow_relation(self, obj1, obj2, **hints):
    """Allow any relation between apps that use the same database."""
    db_obj1 = DATABASE_MAPPING.get(obj1._meta.app_label)
    db_obj2 = DATABASE_MAPPING.get(obj2._meta.app_label)
    if db_obj1 and db_obj2:
    if db_obj1 == db_obj2:
    return True
    else:
    return False
    return None

    def allow_syncdb(self, db, model):
    """Make sure that apps only appear in the related database."""

    if db in DATABASE_MAPPING.values():
    return DATABASE_MAPPING.get(model._meta.app_label) == db
    elif model._meta.app_label in DATABASE_MAPPING:
    return False
    return None

    def allow_migrate(self, db, app_label, model=None, **hints):
    """
    Make sure the auth app only appears in the 'auth_db'
    database.
    """
    if db in DATABASE_MAPPING.values():
    return DATABASE_MAPPING.get(app_label) == db
    elif app_label in DATABASE_MAPPING:
    return False
    return None

    # for Django 1.4 - Django 1.6
    def allow_syncdb(self, db, model):
    """Make sure that apps only appear in the related database."""

    if db in DATABASE_MAPPING.values():
    return DATABASE_MAPPING.get(model._meta.app_label) == db
    elif model._meta.app_label in DATABASE_MAPPING:
    return False
    return None

    # Django 1.7 - Django 1.11
    def allow_migrate(self, db, app_label, model_name=None, **hints):
    if db in DATABASE_MAPPING.values():
    return DATABASE_MAPPING.get(app_label) == db
    elif app_label in DATABASE_MAPPING:
    return False
    return None




    python manage.py makemigrations
    python manage.py migrate --datebase=default
    python manage.py migrate --datebase=publish


    一个app同时连接多个数据库

    实例:
    class test(models.Model):
    test_id = models.IntegerField()
    test_a_id = models.IntegerField()

    class mt(models.Model):
    test_id = models.IntegerField()
    test_a_id = models.IntegerField()

    class another(models.Model):
    test_id = models.IntegerField()
    test_a_id = models.IntegerField()
    class Meta:
    app_label = 'another'

    class dsasdas(models.Model):
    test_id = models.IntegerField()
    test_a_id = models.IntegerField()

    class Meta:
    app_label = 'another' #app的名字


    DATABASE_APPS_MAPPING = {
            'backend': 'default',
            'another': 'default2',
    }
     
  • 相关阅读:
    程序员的出路在哪里
    基于.NET平台常用的框架整理
    Asp.Net MVC WebApi2 自动生成帮助文档
    Jquery操作select选项集合,判断集合中是否存在option
    C#三种判断数据库中取出的字段值是否为空(NULL) 的方法
    未能加载文件或程序集“XX.XXX.Web”或它的某一个依赖项。试图加载格式不正确的程序
    网页设计制作面试题(1)
    HTML5 Canvas 画纸飞机组件
    HTML5 Canvas 画虚线组件
    C# 根据域名获取IP地址
  • 原文地址:https://www.cnblogs.com/fan-1994716/p/14676113.html
Copyright © 2011-2022 走看看