Django 多数据库联用
来源:互联网 发布:明底线知敬畏剖析材料 编辑:程序博客网 时间:2024/05/21 13:02
每个app都可以单独设置一个数据库
settings.py中有数据库的相关设置,有一个默认的数据库 default,我们可以再加一些其它的,比如:
# Database# https://docs.djangoproject.com/en/1.8/ref/settings/#databasesDATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), }, 'db1': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'dbname1', 'USER': 'your_db_user_name', 'PASSWORD': 'yourpassword', "HOST": "localhost", }, 'db2': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'dbname2', 'USER': 'your_db_user_name', 'PASSWORD': 'yourpassword', "HOST": "localhost", },} # use multi-database in django# add by WeizhongTuDATABASE_ROUTERS = ['project_name.database_router.DatabaseAppsRouter']DATABASE_APPS_MAPPING = { # example: #'app_name':'database_name', 'app1': 'db1', 'app2': 'db2',}在project_name文件夹中存放 database_router.py 文件,内容如下:
# -*- coding: utf-8 -*-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这样就实现了指定的 app 使用指定的数据库了,当然你也可以多个sqlite3一起使用,相当于可以给每个app都可以单独设置一个数据库!如果不设置或者没有设置的app就会自动使用默认的数据库。
0 0
- Django 多数据库联用
- django多数据库联用
- Django17-多数据库联用
- django 多数据库
- django 多数据库
- django多数据库事务处理
- django 多数据库配置
- Django使用多数据库
- Django 多数据库 + mysql + wsgi + apache
- Django 连接多数据库 配置
- django - 多数据库及分库实现
- 多对多数据库创建方式Django
- Django 多数据操作 router 方法
- Django数据库一对多数据关系
- Django数据库多对多数据关系
- Django的多数据库的处理(垂直分库和水平分库)
- django 1.8 官方文档翻译: 2-5-6 多数据库
- django 项目中使用多数据库 multiple databases(动态database file)
- my.ini配置文件
- 03_Java 多态
- 【PAT】1104. Sum of Number Segments (20)
- 由开发项目衍生出的框架级别副产品
- 数据链路层
- Django 多数据库联用
- Go的50度灰:Golang新开发者要注意的陷阱和常见错误
- python scikit learn 文本分类
- HDU 5592 ZYB's Permutation(树状数组)
- HDOJ 5591 ZYB's Game(简单博弈)
- 社会化分享的简单实现
- 【PAT】1105. Spiral Matrix (25)
- Optional变量的?和!的区别
- iOS新闻客户端开发教程-完整教程目录