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解析xml模块封装代码
Feb 07 Python
python在windows命令行下输出彩色文字的方法
Mar 19 Python
分析Python的Django框架的运行方式及处理流程
Apr 08 Python
Python的GUI框架PySide的安装配置教程
Feb 16 Python
浅谈Python生成器generator之next和send的运行流程(详解)
May 08 Python
Python sqlite3事务处理方法实例分析
Jun 19 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
Jul 06 Python
Python中利用xpath解析HTML的方法
May 14 Python
Python设计模式之命令模式原理与用法实例分析
Jan 11 Python
我就是这样学习Python中的列表
Jun 02 Python
Django模板报TemplateDoesNotExist异常(亲测可行)
Dec 18 Python
pycharm代码删除恢复的方法
Jun 26 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设计模式 Chain Of Responsibility (职责链模式)
2011/06/26 PHP
input file获得文件根目录简单实现
2013/04/26 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
2013/08/01 PHP
PHP实现即时输出、实时输出内容方法
2015/05/27 PHP
php数组索引与键值操作技巧实例分析
2015/06/24 PHP
yii2 数据库读写分离配置示例
2017/02/10 PHP
Laravel框架Auth用户认证操作实例分析
2019/09/29 PHP
设置下载不需要倒计时cookie(倒计时代码)
2008/11/19 Javascript
Iframe thickbox2.0使用的方法
2009/03/05 Javascript
基于jQuery的公告无限循环滚动实现代码
2012/05/11 Javascript
自定义百度分享的分享按钮
2015/03/18 Javascript
jQuery实现的网页左侧在线客服效果代码
2015/10/23 Javascript
jQuery实现页面顶部下拉广告
2016/12/30 Javascript
JS中使用正则表达式g模式和非g模式的区别
2017/04/01 Javascript
Javascript中八种遍历方法的执行速度深度对比
2017/04/25 Javascript
Avalonjs双向数据绑定与监听的实例代码
2017/06/23 Javascript
bootstrap table实现双击可编辑、添加、删除行功能
2017/09/27 Javascript
JS实现匀速与减速缓慢运动的动画效果封装示例
2018/08/27 Javascript
如何在Vue中抽离接口配置文件
2019/10/31 Javascript
vue路由拦截器和请求拦截器知识点总结
2019/11/08 Javascript
[01:06:54]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第二场 2月28日
2021/03/11 DOTA
python中实现精确的浮点数运算详解
2017/11/02 Python
对pandas中Series的map函数详解
2018/07/25 Python
Python 使用类写装饰器的小技巧
2018/09/30 Python
PyTorch基本数据类型(一)
2019/05/22 Python
PyTorch之图像和Tensor填充的实例
2019/08/18 Python
pytorch 模拟关系拟合——回归实例
2020/01/14 Python
通过实例解析Python RPC实现原理及方法
2020/07/07 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
详解Scrapy Redis入门实战
2020/11/18 Python
美国著名首饰网站:BaubleBar
2016/08/29 全球购物
高分子材料与工程专业推荐信
2013/12/01 职场文书
企业管理部经理岗位职责
2013/12/24 职场文书
绩效考核实施方案
2014/03/18 职场文书
销售顾问工作计划书
2014/09/15 职场文书
二手车交易协议书标准版
2014/11/16 职场文书