前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 3.6 使用数据库连接池工具类封装代码工具类

python 3.6 使用数据库连接池工具类封装代码工具类

作者头像
Java架构师必看
发布2021-03-22 11:39:59
1.5K0
发布2021-03-22 11:39:59
举报
文章被收录于专栏:Java架构师必看

1. mysql 数据库连接配置类 dbconfig.py

代码语言:javascript
复制
# -*- encoding=utf8 -*-

"""
数据库连接配置类
"""

__author__ = "LT"

# 数据库连接配置信息
mysqldb_config = {
    'host': '127.0.0.1',
    'port': 3306,
     # 数据库
    'database': 'uitest',
     # 用户名和密码
    'user': 'root',
    'password': '123456',
     # 数据库编码
    'charset': 'utf8'
}

2. mysql 数据库连接池工具类 dbPoolUtils.py

代码语言:javascript
复制
# -*- encoding=utf8 -*-

"""
数据库连接池操作工具类
PooledDB这个用于多线程的,如果你的程序频繁地启动和关闭纯种,最好使用这个
PersistentDB这个用于单线程,如果你的程序只是在单个线程上进行频繁的数据库连接,最好使这个
使用前:安装  
pip3 install pymysql 或者 pip install pymysql
pip3 install DBUtils 或者 pip install DBUtils
"""

__author__ = "LT"

import pymysql
from DBUtils.PooledDB import PooledDB, SharedDBConnection
from DBUtils.PersistentDB import PersistentDB, PersistentDBError, NotSupportedError

from dbconfig import mysqldb_config

# 数据库连接配置信息
config = mysqldb_config

def get_db_pool(is_mult_thread):
    if is_mult_thread:
        poolDB = PooledDB(
            # 指定数据库连接驱动
            creator=pymysql,
            # 连接池允许的最大连接数,0和None表示没有限制
            maxconnections=3,
            # 初始化时,连接池至少创建的空闲连接,0表示不创建
            mincached=2,
            # 连接池中空闲的最多连接数,0和None表示没有限制
            maxcached=5,
            # 连接池中最多共享的连接数量,0和None表示全部共享(其实没什么卵用)
            maxshared=3,
            # 连接池中如果没有可用共享连接后,是否阻塞等待,True表示等等,
            # False表示不等待然后报错
            blocking=True,
            # 开始会话前执行的命令列表
            setsession=[],
            # ping Mysql服务器检查服务是否可用
            ping=0,
            **config
        )
    else:
        poolDB = PersistentDB(
            # 指定数据库连接驱动
            creator=pymysql,
            # 一个连接最大复用次数,0或者None表示没有限制,默认为0
            maxusage=1000,
            **config
        )
    return poolDB

# 私有方法内部启动测试
if __name__ == '__main__':
    # 以单线程的方式初始化数据库连接池
    db_pool = get_db_pool(False)
    # 从数据库连接池中取出一条连接
    conn = db_pool.connection()
    cursor = conn.cursor()
    # 随便查一下吧
    cursor.execute('select * from uicase')
    # 随便取一条查询结果
    result = cursor.fetchone()
    print(result)
    # 把连接返还给连接池
    conn.close()

3. mysql 数据库操作封装通用工具类 dbUtils.py

代码语言:javascript
复制
# -*- encoding=utf8 -*-

"""
数据库操作封装通用工具类
"""

__author__ = "LT"

from dbPoolUtils import *
import pymysql

# 创建连接
def create_conn():
    # 以单线程的方式初始化数据库连接池
    db_pool = get_db_pool(False)
    # 从数据库连接池中取出一条连接
    conn = db_pool.connection()
    cursor = conn.cursor(pymysql.cursors.DictCursor)
    return conn, cursor

# 关闭连接
def close_conn(conn, cursor):
    conn.close()
    cursor.close()

# 查询一条
def select_one(sql, args):
    conn, cur = create_conn()
    cur.execute(sql, args)
    result = cur.fetchone()
    close_conn(conn, cur)
    return result

# 根据条件查询所有
def select_all(sql, args):
    conn, cur = create_conn()
    cur.execute(sql, args)
    result = cur.fetchall()
    close_conn(conn, cur)
    return result

# 新增一条记录
def insert_one(sql, args):
    conn, cur = create_conn()
    result = cur.execute(sql, args)
    conn.commit()
    close_conn(conn, cur)
    return result

# 新增一条纪录 并返回主键id
def insert_one_pk(sql, args):
    conn, cur = create_conn()
    result = cur.execute(sql, args)
    conn.commit()
    close_conn(conn, cur)
    return cur.lastrowid
    
# 删除一条记录
def delete_one(sql,args):
    conn,cur = create_conn()
    result = cur.execute(sql,args)
    conn.commit()
    close_conn(conn,cur)
    return result
    
# 更新一条记录
def update_one(sql,args):
    conn,cur = create_conn()
    result = cur.execute(sql,args)
    conn.commit()
    close_conn(conn,cur)
    return result


# 私有方法内部启动测试
if __name__ == '__main__':
    # 增加
    # sql = "insert into uicase(id,type) VALUE (%s,%s)" 
    # res = insert_one(sql, [2,"test"])
    # print(res)
    
    # 删除
    # sql = "delete from uicase where id = %s"   
    # res = delete_one(sql, 2)
    # print(res)

    # 查询全部
    # sql = "select * from uicase" 
    # res = select_all(sql, [])
    # print(res)

    # 查询一条
    # sql = "select * from uicase where id=%s"
    # res = select_one(sql, "1")
    # print(res)

    # 更新
    # sql = " UPDATE uicase set type=%s where id = %s"
    # res = update_one(sql,("myupdate","2"))
    # print(res)

本文由来源 jackaroo2020,由 javajgs_com 整理编辑,其版权均为 jackaroo2020 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. mysql 数据库连接配置类 dbconfig.py
  • 2. mysql 数据库连接池工具类 dbPoolUtils.py
  • 3. mysql 数据库操作封装通用工具类 dbUtils.py
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档