库的配置

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. mac 下面用dd 制作u盘启动

    用dd来把安装包烧到U盘的,发现U盘变小了,mac磁盘工具也不能格式化,就只好用命令行了.diskutil list #1.找到U盘的代号 比如disk1diskutil unmountDisk /d ...

  2. python开发笔记-pymsslq连接操作SqlServer数据库

    1. 普通连接测试 官方文档样例:http://pymssql.org/en/latest/pymssql_examples.html pymssql模块使用指南:https://blog.csdn. ...

  3. 平时没有怎么用Excel做 加减乘除 计算,猛地发现,其实Excel 是一个很好的简单计算器

    平时没有怎么用Excel做 加减乘除 计算,猛地发现,其实Excel 是一个很好的简单计算器

  4. Python3基础 from...import...as 解决局部导入时的函数名重复问题

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

  5. java多线程(一)创建线程的四种方式

    1.   什么是并发与并行 要想学习多线程,必须先理解什么是并发与并行 并行:指两个或多个事件在同一时刻发生(同时发生). 并发:指两个或多个事件在同一个时间段内发生. 2.   什么是进程.线程 进 ...

  6. OSI七层模型、TCP/IP五层模型

    OSI网络互连的七层框架:物理层.数据链路层.网络层.传输层.会话层.表示层.应用层: <1>应用层 OSI参考模型中最靠近用户的一层,是为计算机用户提供应用接口,为用户直接提供各种网络服 ...

  7. 箱型图Box

    箱型图Box 觉得有用的话,欢迎一起讨论相互学习~Follow Me 又称为盒须图.盒式图.盒状图或箱线图,是一种用作显示一组数据分散情况资料的统计图. 箱形图最大的优点就是不受异常值的影响,能够准确 ...

  8. Golang 连接ActiveMQ

    使用ActiveMQ库:github.com/go-stomp/stomp 示例代码 package main import ( "net" "fmt" &qu ...

  9. eclipse不提示

    1.菜单window->Preferences->Java->Editor->Content Assist->Enable auto activation 选项要打上勾 ...

  10. 分布式事务的 N 种实现

    转自:http://myfjdthink.com/2019/04/26/%E5%88%86%E5%B8%83%E5%BC%8F%E4%BA%8B%E5%8A%A1%E7%9A%84-n-%E7%A7% ...