首页 > 数据库 >Django入门到放弃之数据库配置

Django入门到放弃之数据库配置

时间:2022-08-27 23:46:00浏览次数:165  
标签:入门 数据库 配置 db pymysql Django import 链接

1.配置连接MySQL数据库

settings:
DATABASES = {
    'default': { 
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'homework1009',
        'USER': 'root',
        'PASSWORD': 'xxxxx',
        'HOST': '192.168.1.128',
        'PORT': '3306',
        'DEFAULT_CHARSET':'utf-8',
        'OPTIONS': {
            'init_command': 'SET sql_mode=STRICT_TRANS_TABLES',
        }
    }
}
 # 注意设置MySQL数据库为utf8
    
 
 
项目同名目录__init__.py
import pymysql
pymysql.install_as_MySQLdb()

2.配置数据库连接池

# sql_pool.py
   import pymysql
    # from DBUtils.PooledDB import PooledDB 1.x版本使用
    from dbutils.pooled_db import PooledDB  # 2.x版本使用
    POOL = PooledDB(
        creator=pymysql,  # 使用链接数据库的模块
        maxconnections=6,  # 连接池允许的最大连接数,0和None表示不限制连接数
        mincached=2,  # 初始化时,链接池中至少创建的空闲的链接,0表示不创建
        maxcached=5,  # 链接池中最多闲置的链接,0和None不限制
        maxshared=3,  # 链接池中最多共享的链接数量,0和None表示全部共享。PS: 无用,因为pymysql和MySQLdb等模块的 threadsafety都为1,所有值无论设置为多少,_maxcached永远为0,所以永远是所有链接都共享。
        blocking=True,  # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错
        maxusage=None,  # 一个链接最多被重复使用的次数,None表示无限制
        setsession=[],  # 开始会话前执行的命令列表。
        ping=0,
        # ping MySQL服务端,检查是否服务可用。
        host='127.0.0.1', # 以下配置也可单独在配置文件中配置
        port=3306,
        user='root',
        password='123',
        database='luffy',
        charset='utf8'
    )
 

# app.py
    from sql_pool import POOL
	conn = POOL.connection() # 从连接池种取一个链接(如果没有,阻塞在这)
    curser = conn.cursor()
    curser.execute('select * from luffy_order where id<2')
    res=curser.fetchall()
    print(res)

3.数据库读写分离

一主一从

修改数据库的配置文件

DATABASES = {
    'default': { # 写(主机)
        'ENGINE': 'django.db.backends.mysql', # 数据库引擎
        'HOST': '192.168.103.158', # 数据库主机
        'PORT': 3306, # 数据库端口
        'USER': 'admin', # 数据库用户名
        'PASSWORD': '111111', # 数据库用户密码
        'NAME': 'robot' # 数据库名字
    },
    'slave': { # 读(从机)
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '192.168.103.158',
        'PORT': 8306,
        'USER': 'root',
        'PASSWORD': '222222',
        'NAME': 'robot'
    }
}

创建和配置数据库读写路由

# app01/db_router.py
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

配置数据库读写路由

DATABASE_ROUTERS = ['app01.db_router.MasterSlaveDBRouter'] # 注意路径

一主多从

1.settings中添加多个salve数据库配置
2.创建和配置数据库读路由
import random
class MasterSlaveDBRouter(object):
    """数据库读写路由"""

    def db_for_read(self, model, **hints):
        """读"""
        salve_list = ['',''] # 存放配置salve名称的列表
        return random.choice(salve_list)

  

标签:入门,数据库,配置,db,pymysql,Django,import,链接
From: https://www.cnblogs.com/panwenbin-logs/p/16631807.html

相关文章

  • Django入门到放弃之中间件
    1.Django中间件作用修改请求,即传送到view中的HttpRequest对象。修改响应,即view返回的HttpResponse对象。2.中间件五个方法process_request☆1.proce......
  • Django入门到放弃之CSRF_TOKEN
    1.django解决csrf攻击方法django使用中间件:django.middleware.csrf.CsrfViewMiddleware解决csrf攻击form表单使用:-在form表单中{%csrf_token%}ajax提交方式一......
  • Django入门到放弃之Auth模块
    auth模块是Django提供的标准权限管理系统,可以提供用户身份认证,用户组和权限管理。auth可以和admin模块配合使用,快速建立网站的管理系统。1.内置属性方法authenticate......
  • Django入门到放弃之forms组件
    1.介绍1注册功能,登录功能,前端需要校验(字段长度,邮箱是否合法。。。)2前端校验可以没有,后端校验是必须的,使用传统方式if判断写的很多3借助于forms组件,可以快速实现字......
  • Django入门到放弃之cookies
    1.获取Cookierequest.COOKIESrequest.COOKIES['key']#获取带签名的cookierequest.get_signed_cookie(key,default=RAISE_ERROR,salt='',max_age=None)#获取sign......
  • Django入门到放弃之session
    1.Django中Session相关方法#取值request.session['k1']request.session.get('k1',None)#request.session这句是帮你从cookie里面将sessionid的值取出来,将django-sess......
  • Django入门到放弃之ajax
    1.ajax简单使用特性: 1.异步请求 2.局部刷新 #登录认证 $.ajax({ url:'/login/',#请求路径 type:'post',#请求方式 data:{ username:$('#userna......
  • Django入门到放弃之分页器
    1.属性和方法#######1Paginator对象的属性和方法book_list=models.Book.objects.all()#注意all操作实际是分批次获取数据,当前版本为limit21#实例化得到对......
  • Django入门到放弃之ORM单表操作
    1.常用和非常用字段和参数概览#常用字段 -IntegerField整数-AutoField-BooleanField-CharField-DateField-DateTimeField-DecimalFi......
  • Django入门到放弃之模板及标签
    1.django模板使用的两种方式#方式一 returnrender(request,'time.html',context={'current_date':str(now),'title':'lqzNB'})#方式二(页面静态化,提高网站并发量)......