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',
    }
     
  • 相关阅读:
    c# 自定义事件和委托
    C#委托之个人理解(转)
    invokeRequired属性和 invoke()方法
    .NET(C#)连接各类数据库
    Mobile Web Development with ASP.NET 2.0
    移动飞信WEB发送服务接口
    4行C#代码打造专业数据库连接配置界面
    domino 中 UniversalID 和NoteID的区别
    VB中preserve的用法
    LOTUS Note ID 剖析
  • 原文地址:https://www.cnblogs.com/fan-1994716/p/14676113.html
Copyright © 2011-2022 走看看