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标准库中的wave模块绘制乐谱的简单教程
Mar 30 Python
Python实现的多线程http压力测试代码
Feb 08 Python
对numpy中布尔型数组的处理方法详解
Apr 17 Python
如何安装多版本python python2和python3共存以及pip共存
Sep 18 Python
python操作kafka实践的示例代码
Jun 19 Python
用pytorch的nn.Module构造简单全链接层实例
Jan 14 Python
Python如何向SQLServer存储二进制图片
Jun 08 Python
Django Form常用功能及代码示例
Oct 13 Python
Python实现冒泡排序算法的完整实例
Nov 04 Python
pycharm 配置svn的图文教程(手把手教你)
Jan 15 Python
Python+Appium实现自动化清理微信僵尸好友的方法
Feb 04 Python
python中的sys模块和os模块
Mar 20 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 七大优势分析
2009/06/23 PHP
关于PHP模板Smarty的初级使用方法以及心得分享
2013/06/21 PHP
php实现从上传文件创建缩略图的方法
2015/04/02 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
2016/03/21 PHP
laravel中的一些简单实用功能
2018/11/03 PHP
PHP中mysqli_get_server_version()的实例用法
2020/02/03 PHP
点击下载链接 弹出页面实现代码
2009/10/01 Javascript
jquery 事件冒泡的介绍以及如何阻止事件冒泡
2012/12/25 Javascript
jQuery 全选/反选以及单击行改变背景色实例
2013/07/02 Javascript
jQuery+Ajax实现限制查询间隔的方法
2016/06/07 Javascript
微信小程序 wx.uploadFile无法上传解决办法
2016/12/14 Javascript
原生JS和jQuery操作DOM对比总结
2017/01/19 Javascript
angular和BootStrap3实现购物车功能
2017/01/25 Javascript
Vue 多层组件嵌套二种实现方式(测试实例)
2017/09/08 Javascript
JavaScript中 ES6变量的结构赋值
2018/07/10 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
如何基于vue-cli3.0构建功能完善的移动端架子
2019/04/24 Javascript
Vue实例的对象参数options的几个常用选项详解
2019/11/08 Javascript
vue的三种图片引入方式代码实例
2019/11/19 Javascript
[37:45]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS Orenda
2014/05/22 DOTA
pycharm 使用心得(五)断点调试
2014/06/06 Python
用Python实现协同过滤的教程
2015/04/08 Python
Python获取任意xml节点值的方法
2015/05/05 Python
使用Python获取并处理IP的类型及格式方法
2018/11/01 Python
详解Python下Flask-ApScheduler快速指南
2018/11/04 Python
关于HTML5的22个初级技巧(图文教程)
2012/06/21 HTML / CSS
英国最大的独立玩具专卖店:The Entertainer
2019/09/06 全球购物
Made in Design英国:设计家具、照明、家庭装饰和花园家具
2019/09/24 全球购物
施工安全协议书
2013/12/11 职场文书
名人演讲稿范文
2013/12/28 职场文书
数控技术专业毕业自荐书范文
2014/02/05 职场文书
广告设计专业毕业生自我鉴定
2014/09/27 职场文书
支行行长竞聘报告
2014/11/06 职场文书
抄袭同学作业检讨书1000字
2014/11/20 职场文书
关于python类SortedList详解
2021/09/04 Python
SQLServer常见数学函数梳理总结
2022/08/05 MySQL