以前一直在用Java来开发,数据库连接池等都是有组件封装好的,直接使用即可,最近在尝试Python的学习,碰到了和数据库打交道的问题,和数据库打交道我们都知道,数据库连接池必不可少,不然要么就是程序异常不稳定,要么就是数据库莫名其妙挂了,
本篇博客主要是对数据库操作的简单封装,相当于一个DBHelper
操作类
组件
Python中的数据库连接操作所需组件
pymysql
:mysql的Python连接包DBUtils
:连接池组件configparser
:配置文件模块mysql-connector-python
:驱动包
以上模块都是必装组件,使用pip很轻松就安装
开始
组件的封装主要考虑到多种数据库、可配置的情况,因此我们的数据库相关信息不能使用硬编码的方式,需要将数据库放到配置文件中,这样和代码会有一个解耦,也不用频繁更改代码
代码
封装的类主要包含的基础方法:
- 提供查询的方法
- 分页查询的方法
- 插入数据
- 删除数据
- 更新数据
- 批量插入、删除、更新数据
配置文件
将数据库的相关信息写入db.conf
配置文件中,配置文件如下:
[master]
# 数据库连接主机
host=192.168.0.212
# 数据库端口号
port=3306
# 用户名
user=root
# 密码
password=123456
# 数据库名称
database=test
# 数据库连接池最大连接数
maxconnections=20
# 数据库连接池最小缓存数
mincached=5
# 数据库连接池最大缓存数
maxcached=10
[local111]
# 数据库连接主机
host=192.168.0.111
# 数据库端口号
port=3306
# 用户名
user=root
# 密码
password=123456
# 数据库名称
database=test
# 数据库连接池最大连接数
maxconnections=20
# 数据库连接池最小缓存数
mincached=5
# 数据库连接池最大缓存数
maxcached=10
数据库的配置可以是多个,我们可以配置多个数据源,然后在代码中方便使用
MySQLConnection
数据库封装类MySQLConnection.py
,代码如下:
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
#!@File : database.py
#!@Time : 2019/9/23 21:57
#!@Author : xiaoyumin
#!@Version : 1.0
#!@Contact : xiaoymin@foxmail.com
#!@License : Copyright (C) 2018 Zhejiang xiaominfo Technology CO.,LTD.
#!@Desc : 数据库连接池相关
import pymysql
from DBUtils.PooledDB import PooledDB
import logging
import configparser
# 读取数据库配置信息
config=configparser.ConfigParser()
config.read('../db.conf',encoding='UTF-8')
sections=config.sections()
# 数据库工厂
dbFactory={
}
for dbName in sections:
# 读取相关属性
maxconnections=config.get(dbName,"maxconnections")
mincached=config.get(dbName,"mincached")
maxcached=config.get(dbName,"maxcached")
host=config.get(dbName,"host")
port=config.get(dbName,"port")
user=config.get(dbName,"user")
password=config.get(dbName,"password")
database=config.get(dbName,"database")
databasePooled=PooledDB(creator=pymysql,
maxconnections=int(maxconnections),
mincached=int(mincached),
maxcached=int(maxcached),
blocking=True,
cursorclass = pymysql.cursors.DictCursor,
host=host,
port=int(port),
user=user,
password=password,
database=database)
dbFactory[dbName]=databasePooled
class MySQLConnection(object):
"""
数据库连接池代理对象
查询参数主要有两种类型
第一种:传入元祖类型,例如(12,13),这种方式主要是替代SQL语句中的%s展位符号
第二种: 传入字典类型,例如{"id":13},此时我们的SQL语句需要使用键来代替展位符,例如:%(name)s
"""
def __init__(self,dbName=