库的配置

1.读写分离

  • settings配置
#settings.py 配置库信息,生成2个库

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
'db2': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db2.sqlite3'),
},
} python3 manage.py makemigrations #生成迁移文件
python3 manage.py migrate --database db2 #db2数据库迁移
  • 手动操作
ret = model.Student.objects.all().using('db2')#查询db2库所有数据

models.Student.object.using("default").create(name='xxoo')#往default库写入信息

#db2查询name='ss',并更改name,并保存在default库中
obj = models.Stundet.objects.using('db2').get(name='ss')
obj.name = "sha"
obj.save(using="default")
  • 自动操作
#myrouter.py

class Router:
def db_for_write(self,model,**kwargs):
return "db2" def db_for_read(self,model,**kwargs):
return "default"
#settings.py配置
DATABASE_ROUTERS=['myrouter.Router',]

2.一主多从

#myrouter.py

class Router:
def db_for_write(self,model,**kwargs):
return "default" def db_for_read(self,model,**kwargs):
return random.choice(['db2','db3',"db4"])
#settings.py配置
DATABASE_ROUTERS=['myrouter.Router',]

3.分库分表

  • 分库:
#settings.py配置
#myrouter.py
class Router:
"""
app01 model db1
app02 model db2
"""
def db_for_write(self,model,**kwargs):
app_name = model._meta.app_label#此操作能获得app的名字
if app_name == "app01":
return "db1"
elif app_name == "app02":
return "app02" def db_for_read(self,model,**kwargs):
app_name = model._meta.app_label#此操作能获得app的名字
if app_name == "app01":
return "db1"
elif app_name == "app02":
return "app02"

4.Django执行原生SQL

  • 单起一个文件
import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "temp.settings")
djnago.setup()
#以上配置django环境 #extra方法:
from app01 import models
#从Student,找id大于1的对象值
ret = models.Student.object.all().extra(where=['id>%s'],params=['1']).values()
print(ret) #raw方法:
ret = models.Student.objects.raw('select * from main.app01_classes')
print(ret)
for i in ret:
print(i)#拿到学生对象
#connection方法:
from django.db import connections
#cursor = connections.cursor()
cursor = connections['db2'].cursor()#指向db2库
cursor.execute("""select * from main.app_classes where id=%s""",[1,])
row = cursor.fetchall()
print(row)

Django:实现读写分离的更多相关文章

  1. docker配置mysql主从与django实现读写分离

    一.搭建主从mysql环境 1 下载mysql镜像 docker pull mysql:5.7 2 运行刚下载的mysql镜像文件 # 运行该命令之前可以使用`docker images`是否下载成功 ...

  2. django数据库读写分离

    django数据库读写分离 1. 配置数据库 settings.py文件中 用SQLite: DATABASES = { 'default': { 'ENGINE': 'django.db.backe ...

  3. Django13 /缓存、信号、django的读写分离

    Django13 /缓存.信号.django的读写分离 目录 Django13 /缓存.信号.django的读写分离 1. 缓存 2. 信号 3. django的读写分离 1. 缓存 缓存简述: 缓存 ...

  4. Django 数据库读写分离 分库分表

    多个数据库 配置: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BA ...

  5. django数据库读写分离,分库

    读写分离 在settings中配置不同名称的数据库连接参数,并配置一条数据库选择路由 DATABASES = { 'default': { 'ENGINE': 'django.db.backends. ...

  6. 搭建MySQL主从实现Django读写分离

    一.MySQL主从搭建 主从配置原理: 主库写日志到 BinLog 从库开个 IO 线程读取主库的 BinLog 日志,并写入 RelayLog 再开一个 SQL 线程,读 RelayLog 日志,回 ...

  7. (转)Django配置数据库读写分离

    转:https://blog.csdn.net/Ayhan_huang/article/details/78784486 转:http://www.cnblogs.com/dreamer-fish/p ...

  8. Django中MySQL读写分离技术

    最近需要用到Django的MySQL读写分离技术,查了一些资料,把方法整理了下来. 在Django里实现对MySQL的读写分离,实际上就是将不同的读写请求按一定的规则路由到不同的数据库上(可以是不同类 ...

  9. 配置Django中数据库读写分离

    django在进行数据库操作的时候,读取数据与写数据(曾.删.改)可以分别从不同的数据库进行操作 修改配置文件: DATABASES = { 'default': { 'ENGINE': 'djang ...

随机推荐

  1. 讨厌的linux----vsftpd 匿名上传配置

    核心一句话: vsftpd: refusing to run with writable anonymous root 匿名账号的根目录,不允许写入,否则匿名登录 验证失败 只有再 ftp 命令操作, ...

  2. 【mybatis源码学习】缓存机制

    一.mybatis的缓存 一级缓存:sqlsession级别,默认开启(一个事务内有效)二级缓存:  sqlsessionFactory级别,需要手动开启,在xml配置cache节点(依赖事务的执行结 ...

  3. [清华集训2015]灯泡(浙江大学ZOJ 3203 Light Bulb)

    Time Limit: 1 Second      Memory Limit: 32768 KB Compared to wildleopard's wealthiness, his brother ...

  4. Centos7下安装ORACLE 11g,弹窗不显示

    Centos7下安装ORACLE 11gR2,弹窗不显示,安装界面显示为灰色. 解决方法:执行安装时带上一下参数 ./runInstaller -jreLoc /etc/alternatives/jr ...

  5. vscode配置python之settings.json 智能提示

    vscode编写Python的智能提示,搞了好久,参考了各种网上配置,如下,备份方便自己查找. { "workbench.iconTheme": "material-ic ...

  6. Python3基础 is与== 区别

             Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...

  7. weixin-js-sdk

    场景:在h5移动端,实现分享朋友,分享朋友圈. 插曲:一开始我认为是不能做到分享的,主要是我从微信小程序的角度出发的,想着微信小程序都做不到分享朋友圈功能,那h5就更不能实现了,导致出现了错误的判断. ...

  8. (原)理解码率控制模式(x264,x265,vpx)

    理解码率控制模式(x264,x265,vpx) 原文链接:https://slhck.info/video/2017/03/01/rate-control.html 翻译:lihaiping1603@ ...

  9. PMP 第9~10章错题总结

    1.组织分解结构把组织中的部门与项目中的工作包联系起来2.管理项目团队时应该使用冲突管理3.职责分配矩阵(RAM)显示了分配给每个工作包的项目资源,用于说明工作包或活动与项目团队成员之间的关系.而RA ...

  10. c# – Asp.Net Core MVC中Request.IsAjaxRequest()在哪里?

    要了解有关新的令人兴奋的Asp.Net-5框架的更多信息,我正在使用最新发布的Visual Studio 2015 CTP-6来构建一个Web应用程序. 大多数事情看起来真的很有希望,但我似乎找不到R ...