• day22-python操作mysql2


    数据库连接池

    python编程中可以使用MySQLdb进行数据库的连接及诸如查询/插入/更新等操作,但是每次连接mysql数据库请求时,都是独立的去请求访问,相当浪费资源,而且访问数量达到一定数量时,对mysql的性能会产生较大的影响。因此,实际使用中,通常会使用数据库的连接池技术,来访问数据库达到资源复用的目的。

    
    
    python的数据库连接池包 DBUtils:
    DBUtils是一套Python数据库连接池包,并允许对非线程安全的数据库接口进行线程安全包装。DBUtils来自Webware for Python。
     
    DBUtils提供两种外部接口:
    * PersistentDB :提供线程专用的数据库连接,并自动管理连接。
    * PooledDB :提供线程间可共享的数据库连接,并自动管理连接。
    下载地址:https://pypi.python.org/pypi/DBUtils/   下载解压后,使用python setup.py install 命令进行安装
    或者使用
    Pip install DBUtils
     
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # @Time    : 2017/9/18 22:46
    # @Author  : lingxiangxiang
    # @File    : demon4.py
     
     
    import MySQLdb
    from DBUtils.PooledDB import PooledDB
    db_config = {
            "host": "192.168.48.128",
            "port": 3306,
            "user": "xiang",
            "passwd": "123456",
            "db": "python",
            "charset": "utf8"
        }
     
     
    pool = PooledDB(MySQLdb, 5, **db_config)  # 5为连接池里的最少连接数
     
    conn = pool.connection()  # 以后每次需要数据库连接就是用connection()函数获取连接就好了
    cur = conn.cursor()
    SQL = "select * from tmp;"
    r = cur.execute(SQL)
    r = cur.fetchall()
    print(r)
    cur.close()
    conn.close()
     
    PooledDB的参数:
    1. mincached,最少的空闲连接数,如果空闲连接数小于这个数,pool会创建一个新的连接
    2. maxcached,最大的空闲连接数,如果空闲连接数大于这个数,pool会关闭空闲连接
    3. maxconnections,最大的连接数,
    4. blocking,当连接数达到最大的连接数时,在请求连接的时候,如果这个值是True,请求连接的程序会一直等待,直到当前连接数小于最大连接数,如果这个值是False,会报错,
    5. maxshared 当连接数达到这个数,新请求的连接会分享已经分配出去的连接
     
    在uwsgi中,每个http请求都会分发给一个进程,连接池中配置的连接数都是一个进程为单位的(即上面的最大连接数,都是在一个进程中的连接数),而如果业务中,一个http请求中需要的sql连接数不是很多的话(其实大多数都只需要创建一个连接),配置的连接数配置都不需要太大。
    连接池对性能的提升表现在:
    1.在程序创建连接的时候,可以从一个空闲的连接中获取,不需要重新初始化连接,提升获取连接的速度
    2.关闭连接的时候,把连接放回连接池,而不是真正的关闭,所以可以减少频繁地打开和关闭连接
     

      数据库的操作

    现在,我们来详细讲讲python操作数据库的细节,在操作设计数据库之前,我们先要设计数据库表结构,我们就来分析分析经典的学生,课程,成绩,老师这几者他们之间的关系,我们先来分析各个主体他们直接有什么属性,并确定表结构,在实际开发过程中,根据自己的业务需要和属性,设计不同的表结构,以下是我设计的表结构:

    Student

           

    字段名

    类型

    是否为空

    主键

    描述

    StdID

    int

    学生ID

    StdName

    varchar(100)

     

    学生姓名

    Gender

    enum('M', 'F')

     

    性别

    Age

    tinyint

     

    年龄

             
             
             

    Course

           

    字段名

    类型

    是否为空

    主键

    描述

    CouID

    int

    课程ID

    Cname

    varchar(50)

     

    课程名字

    TID

    int

     

    老师ID

             
             
             

    Score

           

    字段名

    类型

    是否为空

    主键

    描述

    SID

    int

    分数ID

    StdID

    int

     

    学生id

    CouID

    int

     

    课程id

    Grade

    int

     

    分数

     

           

    Teacher

           

    字段名

    类型

    是否为空

    主键

    描述

    TID

    int

    老师ID

    Tname

    varcher(100)

     

    老师名字

  • 相关阅读:
    学习Karma+Jasmine+istanbul+webpack自动化单元测试
    学习测试框架Mocha
    WebSockets通信
    简单的CSS圆形缩放动画
    css3 实现图片等比例放大与缩小
    CSS3之多列布局columns详解
    scp传输文件的命令
    学习rollup.js模块文件打包
    go语言之进阶篇通过switch实现类型断言
    go语言之进阶篇通过if实现类型断言
  • 原文地址:https://www.cnblogs.com/wxp997/p/7875450.html
Copyright © 2020-2023  润新知