当前位置:   article > 正文

Django 手把手教你搭建MYSQL多数据源 实现读写分离_django 设置mysql 读写分离

django 设置mysql 读写分离

目录

一、创建3.2版本的Django项目

二、配置MYSQL多数据源

三、实现读写分离


一、创建3.2版本的Django项目

第一步:创建虚拟环境

第二步:打开终端安装django

pip install django==3.2

第三步:创建项目

django-admin startproject django_readwrite .

第四步:添加django服务

第五步:启动django服务测试

二、配置MYSQL多数据源

第一步:创建apps/account用来管理用户相关业务

右键创建apps/account目录

输入命令创建app:

python manage.py startapp account apps/account

右键创建urls.py用作路由:

打开apps.py文件,将代码修改:

注册app组件,打开settings.py

第二步:安装MYSQL相关包

  1. pip install pymysql
  2. pip install mysqlclient

第三步:_init_.py文件加入如下代码

  1. import pymysql
  2. pymysql.install_as_MySQLdb()

第四步:settings.py配置MYSQL数据库信息

  1. DATABASES = {
  2. "default": {
  3. 'ENGINE': 'django.db.backends.mysql',
  4. 'NAME': 'django-readwrite', # 数据库名字
  5. 'USER': 'root',
  6. 'PASSWORD': 'root',
  7. 'HOST': '127.0.0.1', # ip
  8. 'PORT': 3306
  9. },
  10. "bak": {
  11. 'ENGINE': 'django.db.backends.mysql',
  12. 'NAME': 'django-readwrite-bak', # 数据库名字
  13. 'USER': 'root',
  14. 'PASSWORD': 'root',
  15. 'HOST': '127.0.0.1', # ip
  16. 'PORT': 3306
  17. },
  18. }

第五步:手动创建两个库

第六步:models.py中创建实体类

  1. from django.db import models
  2. class UserInfo(models.Model):
  3. name = models.CharField(verbose_name="姓名", max_length=32)
  4. age = models.IntegerField(verbose_name="年龄")

第七步:生成表

  1. python manage.py makemigrations # 找到所有已注册的app中的models.py中的类读取 -> migrations配置
  2. python manage.py migrate --database=default
  3. python manage.py migrate --database=bak

现在两个库都有相同的表了,我们创建的实体类对应的表是account_userinfo。

第八步:编写方法访问数据库

打开account/views.py

  1. from django.shortcuts import render, HttpResponse
  2. from apps.account import models
  3. # 获取用户(读操作)
  4. def getUser(request):
  5. users = models.UserInfo.objects.using("bak").all()
  6. for user in users:
  7. print(user.name)
  8. return HttpResponse('获取用户')
  9. # 创建用户(写操作)
  10. def createUser(request):
  11. models.UserInfo.objects.using("default").create(name="编程抗氧化", age=20)
  12. return HttpResponse('创建用户')

第九步:编写路由

django_readwrite/urls.py

  1. from django.urls import path, include
  2. urlpatterns = [
  3. path('account/', include("apps.account.urls")),
  4. ]

account/urls.py

  1. from django.urls import path
  2. from apps.account import views
  3. urlpatterns = [
  4. path('getUser/', views.getUser),
  5. path('createUser/', views.createUser),
  6. ]

三、实现读写分离

第一步:项目右键创建utils目录,目录下创建router.py文件

  1. class DemoRouter(object):
  2. # 读操作都走bak数据库
  3. def db_for_read(self, model, **hints):
  4. return "bak"
  5. # 写操作都走default数据库
  6. def db_for_write(self, model, **hints):
  7. return "default"

第二步:settings.py配置此路由文件

DATABASE_ROUTERS = ['utils.router.DemoRouter']

第三步:启动服务测试

访问:http://127.0.0.1:8000/account/createUser/

这时我们手动为从库添加一条数据用来测试读取。

再访问:http://127.0.0.1:8000/account/getUser/

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/449889
推荐阅读
相关标签
  

闽ICP备14008679号