Django连接数据库并实现读写分离过程解析

 更新时间:2019年11月13日 10:17:32   作者:Sean_Yang  
这篇文章主要介绍了Django连接数据库并实现读写分离过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

这篇文章主要介绍了Django连接数据库并实现读写分离过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

前言

当一个项目当中有大量的数据的时候,你所有的IO操作都在一个数据库中操作,会造成项目的性能的降低。如果你能对项目中的数据进行读写分离的话,那么将大大提高你项目的性能。而Django自带的机制也对此提供了支持。我们可以简单的操作一下。(当然数据的同步还是需要运维同志的协助)

修改配置文件

Django默认的是default,我们按照它的格式直接添加一个新的配置:

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'),
  }
}

当然,如果你不想使用默认的sqlite3,想使用mysql还需要自己进行一下配置

DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.mysql',
    'HOST': '127.0.0.1', # 主服务器的运行ip
    'PORT': 3306,  # 主服务器的运行port
    'USER': 'django', # 主服务器的用户名
    'PASSWORD': 'django', # 主服务器的密码
    'NAME': 'djangobase'  # 数据表名
  },
  'slave': {
    'ENGINE': 'django.db.backends.mysql', 
    'HOST': '127.0.0.1',
    'PORT': 8306,
    'USER': 'django_slave',
    'PASSWORD': 'django_slave',
    'NAME': 'djangobase_slave'
  }
}  

在项目目录下的__init__文件中添加以下代码,将数据连接方式改为pymysql

import pymysql
pymysql.install_as_MySQLdb()

将数据配置修改完之后就可以在models.py文件当中创建表,接下里就可以进行数据库迁移了

python manage.py makemigrations # 在migrations文件夹下生成记录
python manage.py migrate --database default # 默认可以不写参数
python manage.py migrate --database db2 # 在从库再迁移一次,就可以在上面建立相同的表

手动读写分离

在遇到数据库相关操作的话,需要手动指定要使用的相应数据库,不需要进行多余的配置,但是,当你数据的读写操作过于频繁的时候,这个方法就会略显繁琐。

from django.shortcuts import render, HttpResponse
from app001 import models
# Create your views here.
def write(request):
  models.User.objects.using('default').create(name='张三', pwd='123', phone=1234)
  return HttpResponse('写成功')
def read(request):
  obj = models.User.objects.filter(id=1).using('db2').first()
  return HttpResponse('读成功')

自动读写分离

通过配置数据库路由,来自动实现读写分离,这样就不需要每次读写都手动指定数据库。

在项目的app中创建db_router.py文件,并在该文件中定义一个数据库路由类,用来进行读写分离,这个类最多提供四个方法,分别是:db_for_read、db_for_write、allow_relation、allow_migrate,以下只写了三个。

定义数据库路由类

class MasterSlaveDBRouter(object):
  """数据库主从读写分离路由"""
 
  def db_for_read(self, model, **hints):
    """读数据库"""
    return "slave"
 
  def db_for_write(self, model, **hints):
    """写数据库"""
    return "default"
 
  def allow_relation(self, obj1, obj2, **hints):
    """是否运行关联操作"""
    return True  

配置Router

在settings.py中指定DATABASE_ROUTERS

DATABASE_ROUTERS = ["app001.db_router.MasterSlaveDBRouter"]

可以指定多个数据库路由,比如对于读操作,Django将会循环所有路由中的db_for_read()方法,直到其中一个有返回值,然后使用这个数据库进行当前操作。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Python 解决logging功能使用过程中遇到的一个问题

    Python 解决logging功能使用过程中遇到的一个问题

    这篇文章主要介绍了Python 解决logging功能使用过程中遇到的一个问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • VSCode安装Django插件后实现html语法提示的方法步骤

    VSCode安装Django插件后实现html语法提示的方法步骤

    Vscode是微软推出的一款优秀的ide开发工具,界面简洁美观、默认支持中文,拥有丰富的插件,支持Windows,OS X和Linux,下面这篇文章主要给大家介绍了关于VSCode安装Django插件后实现html语法提示的方法步骤,需要的朋友可以参考下
    2022-08-08
  • VS2019+python3.7+opencv4.1+tensorflow1.13配置详解

    VS2019+python3.7+opencv4.1+tensorflow1.13配置详解

    这篇文章主要介绍了VS2019+python3.7+opencv4.1+tensorflow1.13配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • django框架面向对象ORM模型继承用法实例分析

    django框架面向对象ORM模型继承用法实例分析

    这篇文章主要介绍了django框架面向对象ORM模型继承用法,结合实例形式分析了Django框架ORM模型抽象类继承、多表继承及代理模型继承三种继承方式实现技巧,需要的朋友可以参考下
    2019-07-07
  • python自动化测试之Selenium详解

    python自动化测试之Selenium详解

    这篇文章主要为大家详细介绍了python自动化测试之Selenium,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • Python:二维列表下标互换方式(矩阵转置)

    Python:二维列表下标互换方式(矩阵转置)

    今天小编就为大家分享一篇Python:二维列表下标互换方式(矩阵转置),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python字符串大小写转换拼接删除空白

    Python字符串大小写转换拼接删除空白

    这篇文章主要介绍了Python字符串大小写转换拼接删除空白的方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • Python 转移文件至云对象存储的方法

    Python 转移文件至云对象存储的方法

    对象存储(Cloud Object Storage,COS)是一种存储海量文件的分布式存储服务,具有高扩展性、低成本、可靠安全等优点。这篇文章主要介绍了Python 转移文件至云对象存储,需要的朋友可以参考下
    2021-02-02
  • Python迭代器Iterable判断方法解析

    Python迭代器Iterable判断方法解析

    这篇文章主要介绍了Python迭代器Iterable判断方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Python实现操纵控制windows注册表的方法分析

    Python实现操纵控制windows注册表的方法分析

    这篇文章主要介绍了Python实现操纵控制windows注册表的方法,结合实例形式分析了Python使用_winreg模块以及win32api模块针对Windows注册表操作相关实现技巧,需要的朋友可以参考下
    2019-05-05

最新评论