• 使用django做mysql读写分离


    一、先创建一个django项目

    1.在settings.py文件修改数据库配置,主从库都要配置

    #主库
    'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'test',
            'USER': 'root',
            'PASSWORD': '123456',
            'HOST': '101.132.167.242',
            'PORT': 33307,
        },
    #从库
    'slave': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'test',
            'USER': 'root',
            'PASSWORD': '123456',
            'HOST': '101.132.167.242',
            'PORT': 33306,
        }
    

    2.urls.py设置路径

    urlpatterns = [
        url(r'^index/', views.index),
    ]

    3.views.py

    from django.shortcuts import HttpResponse
    
    def index(request):
        return HttpResponse('ok')

    4.建表models.py

    from django.db import models
    
    class Book(models.Model):
        title=models.CharField(max_length=32)
        price=models.IntegerField()
        ss=models.CharField(max_length=32,default="66")

    5.数据库迁移

    python manage.py makemigraions

    python manage.py migrate app名称 --databse=配置文件数据名称的别名

    主库和从库都能查询用django创建的表

    6.往数据库内插一条数据 (设置之后访问index页面,就会往book表中插入一条数据)

    from django.shortcuts import render,HttpResponse
    from app01.models import Book
    # Create your views here.
    def index(request):
        #往主库里插一条数据
        Book.objects.using("default").create(title="xx",price=10)
        return HttpResponse('ok')

    主从库都插入了数据

    7.前面选定插入数据库都是使用using,还有一种自动操作的方式

     在根目录下创建router.py文件

    class Router1:
        def db_for_read(self, model, **hints):    #读取数据只用从库
            """
            Attempts to read auth models go to auth_db.
            """
            return 'slave'
    
        def db_for_write(self, model, **hints):    #写入数据只用主库
            """
            Attempts to write auth models go to auth_db.
            """
            return 'default'

    在setting.py文件配置    DATABASE_ROUTERS = ['router.Router1',]

     以后往主库中插入数据或者从库中读取数据就不用再指明使用哪个数据库

    from django.shortcuts import render,HttpResponse
    from app01.models import Book
    # Create your views here.
    def index(request):
        #往主库里插一条数据
        Book.objects.create(title="yy",price=20)
        return HttpResponse('ok')
  • 相关阅读:
    HTTP 错误 404.2
    SQL Server 2008 R2如何开启数据库的远程连接(转)
    CSS中font-family:中文字体对应的英文名称
    15/18位身份证号码正则表达式(详细版)
    C#获取系统时间及时间格式
    C#正则表达式判断输入日期格式是否正确
    Linux查看机器负载
    模拟HTTP请求超时时间设置
    MySQL show命令的用法
    innodb事务隔离级别
  • 原文地址:https://www.cnblogs.com/wangcuican/p/12195441.html
Copyright © 2020-2023  润新知