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 动态获取当前运行的类名和函数名的方法
Apr 15 Python
python结合opencv实现人脸检测与跟踪
Jun 08 Python
使用Python生成XML的方法实例
Mar 21 Python
python搭建服务器实现两个Android客户端间收发消息
Apr 12 Python
在PyCharm下使用 ipython 交互式编程的方法
Jan 17 Python
python实现QQ邮箱/163邮箱的邮件发送
Jan 22 Python
pyqt5 使用label控件实时显示时间的实例
Jun 14 Python
python 爬取马蜂窝景点翻页文字评论的实现
Jan 20 Python
NumPy统计函数的实现方法
Jan 21 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
Feb 28 Python
python中如何设置代码自动提示
Jul 15 Python
python使用布隆过滤器的实现示例
Aug 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 PDO函数库详解
2010/04/27 PHP
php实现倒计时效果
2015/12/19 PHP
两个DIV等高的JS的实现代码
2007/12/23 Javascript
javascript 全角转换实现代码
2009/07/17 Javascript
jQuery阻止同类型事件小结
2013/04/19 Javascript
JS对象转换为Jquery对象实现代码
2013/12/29 Javascript
可编辑下拉框的2种实现方式
2014/06/13 Javascript
jQuery实现ajax调用WCF服务的方法(附带demo下载)
2015/12/04 Javascript
javascript的正则匹配方法学习
2016/02/24 Javascript
Nodejs Stream 数据流使用手册
2016/04/17 NodeJs
JavaScript 节流函数 Throttle 详解
2016/07/04 Javascript
AngularJS基础 ng-mouseover 指令简单示例
2016/08/02 Javascript
JavaScript评论点赞功能的实现方法
2017/03/13 Javascript
微信小程序tabbar底部导航
2018/11/05 Javascript
详解基于React.js和Node.js的SSR实现方案
2019/03/21 Javascript
vue项目中使用scss的方法步骤
2019/05/16 Javascript
微信小程序定义和调用全局变量globalData的实现
2019/11/01 Javascript
JS面向对象编程基础篇(一) 对象和构造函数实例详解
2020/03/03 Javascript
python小技巧之批量抓取美女图片
2014/06/06 Python
Python中处理字符串之isalpha()方法的使用
2015/05/18 Python
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
Python 包含汉字的文件读写之每行末尾加上特定字符
2016/12/12 Python
selenium处理元素定位点击无效问题
2019/06/12 Python
Python环境Pillow( PIL )图像处理工具使用解析
2019/09/12 Python
Python 实现向word(docx)中输出
2020/02/13 Python
python实现暗通道去雾算法的示例
2020/09/27 Python
Python logging自定义字段输出及打印颜色
2020/11/30 Python
利用css3制作3D样式按钮实现代码
2013/03/18 HTML / CSS
HTML5 textarea高度自适应的两种方案
2020/04/08 HTML / CSS
妇产科护士自我鉴定
2013/10/15 职场文书
毕业生找工作的自我评价
2013/10/18 职场文书
竞选副班长演讲稿
2014/04/24 职场文书
关于运动会的口号
2014/06/07 职场文书
Python绘制分类图的方法
2021/04/20 Python
MySQL系列之一 MariaDB-server安装
2021/07/02 MySQL
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python