Django中如何实现数据库路由?
虽然我们提供了数据库的信息,它知道怎么连接数据库,但问题是我们保存里面有很多模型,它不知道哪个模型存到哪个数据库。这就要求我们自己来指定,也就是我们自己来实现一个数据库路由。一个数据库路由是一个拥有4个方法的类,这四个方法是:
db_for_read(model, **hints)
对于该model 用哪个数据库来读。
db_for_write(model, **hints)
对于该model用哪个数据库来写。
allow_relation(obj1, obj2, **hints)
是否允许两个对象关联到数据库。
allow_migrate(db, app_label, model_name=None, **hints)
对于指定的app,是否允许对db这个数据库进行migrate
打开routers.py文件,做如下配置:
class SampleDBRouter(object):
def db_for_read(self, model, **hints):
if model._meta.label == 'multiDB.Logger':
return 'logs' (如果是Logger'的模型,就返回logs的数据库。将信息存到lab2)
elif model._meta.label == 'multiDB.LogUser':
return 'users'(如果是LogUser'的模型,就返回users的数据库。将信息存到lab1)
return None
def db_for_write(self, model, **hints):
if model._meta.label == 'multiDB.Logger':
return 'logs'
elif model._meta.label == 'multiDB.LogUser':
return 'users'
return None
def allow_relation(self, obj1, obj2, **hints):
return True (关联,存放到指定地方。)
def allow_migrate(self, db, app_label, model=None, **hints):
if model._meta.label == 'multiDB.Logger':
return db == 'logs'(如果模型是multiDB.Logger,数据库是logs,就可以迁徙)
elif model._meta.label == 'multiDB.LogUser':
return db == 'users'(如果模型是multiDB.LogUser,数据库是users,就可以迁徙)
return None
原文链接:http://www.maiziedu.com/wiki/django/server/
Django中如何实现数据库路由?的更多相关文章
- Django中使用mysql数据库并使用原生sql语句操作
Django自身默认使用sqlite3这个轻量级的数据库,但是当我们开发网站时,sqlite3就没有mysql好,sqlite3适合一些手机上开发使用的数据库. 准备的软件mysql数据库,版本5.7 ...
- django 中连接mysql数据库的操作步骤
django中连接mysql数据库的操作步骤: 1 settings配置文件中 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mys ...
- Django中ORM对数据库的增删改查
Django中ORM对数据库数据的增删改查 模板语言 {% for line in press %} {% line.name %} {% endfor %} {% if 条件 %}{% else % ...
- Django中把SQLite数据库转换为Mysql数据库的配置方法
我们在学习和开发Django的时候,一般是使用SQLite作为数据库.在正式讲网站部署上线是用MySQL数据库比较多.MySQL支持高并发的访问,而且相对于SQLite,MySQL性能更好.下面讲讲如 ...
- django中使用mysql数据库的事务
django中怎么使用mysql数据库的事务 Mysql数据库事务: 在进行后端业务开始操作修改数据库时,可能会涉及到多张表的数据修改,对这些数据的修改应该是一个整体事务,即要么一起成功,要么一起 ...
- python django中使用sqlite3数据库 存储二进制数据ByteArray
在python中使用sqlite3数据库存储二进制流数据ByteArray,在django使用sqlite3数据库时,有时候也要注意最好使用二进制流ByteArray插入字符串. 使用ByteArra ...
- Django中ORM对数据库的增删改查操作
前言 什么是ORM? ORM(对象关系映射)指用面向对象的方法处理数据库中的创建表以及数据的增删改查等操作. 简而言之,就是将数据库的一张表当作一个类,数据库中的每一条记录当作一个对象.在 ...
- django中 对Mysql数据库的建表
Django操作Mysql数据库: 1.1 在settings中,配置数据库相关参数,所以无需修改,这里我们看一下: DATABASES = { 'default': { # 这里可以指定使用的数据库 ...
- Django中使用MySQL数据库的连接配置
1. 安装pymysql pip install pymysql 2. 导入 # 在与 settings.py 同级目录下的 __init__.py 中引入模块和进行配置 import pymysql ...
随机推荐
- Linux内核解析:进程间通信:管道
管道的定义管道的用途管道的操作管道非法read与write内核实现解析管道通信原理及其亲戚通信解析父子进程通信解析亲缘关系的进程管道通信解析管道的注意事项及其性质管道有以下三条性质shell管道的实现 ...
- wxpython example
#!/usr/bin/env python #---------------------------------------------------------------------------- ...
- LeetCode OJ-- Spiral Matrix II
https://oj.leetcode.com/problems/spiral-matrix-ii/ 螺旋矩阵,和题目一一样的思路,这个是产生n*n 矩阵. #include <iostream ...
- C++ 细节知识
1.typedef struct child {string name;struct child* next;}; child* head; head = (child*)malloc(sizeof( ...
- 小程序 之使用HMACSHA1算法加密报文
首先说说我们前端常用的加密技术, 我们常用的加密技术有:如MD5加密,base64加密 今天要说的是HMACSHA1加密技术 先介绍下什么是SHA1算法, 安全哈希算法(Secure Hash Alg ...
- BZOJ 4568 [Scoi2016]幸运数字(树链剖分 + 异或线性基)
题目链接 BZOJ 4568 考虑树链剖分+线段树维护每一段区域的异或线性基 对于每个询问,求出该点集的异或线性基.然后求一下这个线性基里面能异或出的最大值即可. #include <bits ...
- jvm类加载的过程
java类加载过程:加载-->验证-->准备-->解析-->初始化,之后类就可以被使用了.绝大部分情况下是按这 样的顺序来完成类的加载全过程的.但是是有例外的地方,解析也是可以 ...
- [LibreOJ β Round #4] 子集
显然是个二分图,直接求最大独立就行了. #include<bits/stdc++.h> #define ll long long #define pb push_back using na ...
- 某考试 T3 Try to find out the wrong in the test
Discription Hint: 对于 100% 的数据, n<=10^6.
- highcharts中放aqi及6要素,再加上气象5要素的图
var chart = Highcharts.chart('container', { chart: { zoomType: 'xy' }, title: { text: '东京月平均天气数据' }, ...