Python3实现的Mysql数据库操作封装类


Posted in Python onJune 06, 2018

本文实例讲述了Python3实现的Mysql数据库操作封装类。分享给大家供大家参考,具体如下:

#encoding:utf-8
#name:mod_db.py
'''''
使用方法:1.在主程序中先实例化DB Mysql数据库操作类。
   2.使用方法:db=database() db.fetch_all("sql")
'''
import MySQLdb
import MySQLdb.cursors
import mod_config
import mod_logger
DB = "database"
LOGPATH = mod_config.getConfig('path', 'logpath') + 'database.log'
DBNAME = mod_config.getConfig(DB, 'dbname')
DBHOST = mod_config.getConfig(DB, 'dbhost')
DBUSER = mod_config.getConfig(DB, 'dbuser')
DBPWD = mod_config.getConfig(DB, 'dbpassword')
DBCHARSET = mod_config.getConfig(DB, 'dbcharset')
DBPORT = mod_config.getConfig(DB, "dbport")
logger = mod_logger.logger(LOGPATH)
#数据库操作类
class database:
#注,python的self等于其它语言的this
  def __init__(self, dbname=None, dbhost=None):
    self._logger = logger
    #这里的None相当于其它语言的NULL
    if dbname is None:
      self._dbname = DBNAME
    else:
      self._dbname = dbname
    if dbhost is None:
      self._dbhost = DBHOST
    else:
      self._dbhost = dbhost
    self._dbuser = DBUSER
    self._dbpassword = DBPWD
    self._dbcharset = DBCHARSET
    self._dbport = int(DBPORT)
    self._conn = self.connectMySQL()
    if(self._conn):
      self._cursor = self._conn.cursor()
  #数据库连接
  def connectMySQL(self):
    conn = False
    try:
      conn = MySQLdb.connect(host=self._dbhost,
          user=self._dbuser,
          passwd=self._dbpassword,
          db=self._dbname,
          port=self._dbport,
          cursorclass=MySQLdb.cursors.DictCursor,
          charset=self._dbcharset,
          )
    except Exception,data:
      self._logger.error("connect database failed, %s" % data)
      conn = False
    return conn
  #获取查询结果集
  def fetch_all(self, sql):
    res = ''
    if(self._conn):
      try:
        self._cursor.execute(sql)
        res = self._cursor.fetchall()
      except Exception, data:
        res = False
        self._logger.warn("query database exception, %s" % data)
    return res
  def update(self, sql):
    flag = False
    if(self._conn):
      try:
        self._cursor.execute(sql)
        self._conn.commit()
        flag = True
      except Exception, data:
        flag = False
        self._logger.warn("update database exception, %s" % data)
    return flag
  #关闭数据库连接
  def close(self):
    if(self._conn):
      try:
        if(type(self._cursor)=='object'):
          self._cursor.close()
        if(type(self._conn)=='object'):
          self._conn.close()
      except Exception, data:
        self._logger.warn("close database exception, %s,%s,%s" % (data, type(self._cursor), type(self._conn)))

这段代码需要注意几个地方:

1.数据库配置文件变量放在类外面,只在模块被载入的时候读一次,在使用数据库类时,无需再读取。这样有一个好处就是减少了IO的操作。如果是脚本程序需要不停的扫数据库,放在类初始化的时候读数据库配置,那么很有可能造成IO错误,或者读到的section为空,从而导致程序down掉。不好的地方就是如果修改了config,无法及时更新。不过一般程序部署后,不会随意修改config文件,或者在修改config文件后,重新启动程序。不过从程序的健壮性考虑,可以在可能会抛出异常的地方try,catch一下,更好的办法是,在mod_config.py模块中判断一下该section和key是否存在,然后再读取。

2.数据库类在初始化的时候,就将游标赋给它,而不是在进行数据库操作的时候再寻找游标。

PS:在主程序中先实例化DB Mysql数据库操作类。再进行方法使用!

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python的一些用法分享
Oct 07 Python
python3批量删除豆瓣分组下的好友的实现代码
Jun 07 Python
Tensorflow简单验证码识别应用
May 25 Python
python实现两个文件合并功能
Apr 01 Python
使用Python来开发微信功能
Jun 13 Python
python 保存float类型的小数的位数方法
Oct 17 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
Nov 29 Python
Python实现一个数组除以一个数的例子
Jul 20 Python
python中的itertools的使用详解
Jan 13 Python
Django高并发负载均衡实现原理详解
Apr 04 Python
Python如何获取文件路径/目录
Sep 22 Python
Pandas中两个dataframe的交集和差集的示例代码
Dec 13 Python
python操作redis方法总结
Jun 06 #Python
目前最全的python的就业方向
Jun 05 #Python
python多进程提取处理大量文本的关键词方法
Jun 05 #Python
使用python进行文本预处理和提取特征的实例
Jun 05 #Python
python 用正则表达式筛选文本信息的实例
Jun 05 #Python
python和shell获取文本内容的方法
Jun 05 #Python
python 查找文件名包含指定字符串的方法
Jun 05 #Python
You might like
php使浏览器直接下载pdf文件的方法
2013/11/15 PHP
php $_SERVER windows系统与linux系统下的区别说明
2014/02/14 PHP
PHP生成及获取JSON文件的方法
2016/08/23 PHP
关于PHP定时发送服务的解决办法
2017/04/23 PHP
从盛大通行证上摘下来的身份证验证js代码
2011/01/11 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
AngularJS 表达式详细讲解及实例代码
2016/07/26 Javascript
jQuery搜索框效果实现代码(百度关键词联想)
2021/02/25 Javascript
js html css实现复选框全选与反选
2016/10/09 Javascript
JavaScript队列的应用实例详解【经典数据结构】
2017/04/12 Javascript
基于Vue实现页面切换左右滑动效果
2020/06/29 Javascript
微信小程序getPhoneNumber获取用户手机号
2017/09/29 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
Vue脚手架的简单使用实例
2018/07/10 Javascript
vue集成kindeditor富文本的实现示例代码
2019/06/07 Javascript
javascript 原型与原型链的理解及实例分析
2019/11/23 Javascript
vue中移动端调取本地的复制的文本方式
2020/07/18 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
2020/12/10 Javascript
[01:10]为家乡而战!完美世界城市挑战赛全国总决赛花絮
2019/07/25 DOTA
Python语言编写电脑时间自动同步小工具
2013/03/08 Python
深入解析Python中的urllib2模块
2015/11/13 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2018/01/04 Python
Python中矩阵创建和矩阵运算方法
2018/08/04 Python
一看就懂得Python的math模块
2018/10/21 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
2019/04/01 Python
详解Python中pandas的安装操作说明(傻瓜版)
2019/04/08 Python
Python使用正则表达式实现爬虫数据抽取
2020/08/17 Python
在 Python 中使用 MQTT的方法
2020/08/18 Python
英国最大的邮寄种子和植物公司:Thompson & Morgan
2017/09/21 全球购物
Koral官方网站:女性时尚运动服
2019/04/10 全球购物
2014村务公开实施方案
2014/02/25 职场文书
增员口号大全
2014/06/18 职场文书
小学生安全责任书
2014/07/25 职场文书
党员自我评议个人对照检查材料
2014/09/16 职场文书
【DOTA2】总决赛血虐~ XTREME GAMING vs MAGMA - OGA DOTA PIT 2022 CN
2022/04/02 DOTA
python神经网络 使用Keras构建RNN训练
2022/05/04 Python