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中的strftime()方法的使用
May 22 Python
Python基于动态规划算法计算单词距离
Jul 25 Python
Python 绘图和可视化详细介绍
Feb 11 Python
Python判断变量是否为Json格式的字符串示例
May 03 Python
Django 跨域请求处理的示例代码
May 02 Python
python调用自定义函数的实例操作
Jun 26 Python
解决pycharm运行程序出现卡住scanning files to index索引的问题
Jun 27 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
Dec 09 Python
pytorch+lstm实现的pos示例
Jan 14 Python
Python如何解除一个装饰器
Aug 07 Python
Python 解析库json及jsonpath pickle的实现
Aug 17 Python
全网最细 Python 格式化输出用法讲解(推荐)
Jan 18 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
关于shopex同步ucenter的redirect问题,导致script不运行
2013/04/10 PHP
PHP函数addslashes和mysql_real_escape_string的区别
2014/04/22 PHP
PHP实现生成唯一编号(36进制的不重复编号)
2014/07/01 PHP
ThinkPHP中Session用法详解
2014/11/29 PHP
PHP中使用socket方式GET、POST数据实例
2015/04/02 PHP
PHP中的函数声明与使用详解
2017/05/27 PHP
javascript 时间比较实现代码
2009/10/28 Javascript
JSON 学习之JSON in JavaScript详细使用说明
2010/02/23 Javascript
JavaScript 对象链式操作测试代码
2010/04/25 Javascript
JS时间特效最常用的三款
2015/08/19 Javascript
使用JQuery FancyBox插件实现图片展示特效
2015/11/16 Javascript
javascript高级选择器querySelector和querySelectorAll全面解析
2016/04/07 Javascript
解决vue2.x中数据渲染以及vuex缓存的问题
2017/07/13 Javascript
JavaScript基础之流程控制语句的用法
2017/08/31 Javascript
纯html+css+javascript实现楼层跳跃式的页面布局(实例代码)
2017/10/25 Javascript
用React-Native+Mobx做一个迷你水果商城APP(附源码)
2017/12/25 Javascript
浅谈layer弹出层按钮颜色修改方法
2019/09/11 Javascript
微信小程序实现限制用户转发功能的实例代码
2020/02/22 Javascript
JavaScript中如何调用Java方法
2020/09/16 Javascript
在vue中实现某一些路由页面隐藏导航栏的功能操作
2020/09/21 Javascript
[52:41]OG vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/20 DOTA
[05:08]DOTA2-DPC中国联赛3月6日Recap集锦
2021/03/11 DOTA
python简单分割文件的方法
2015/07/30 Python
Django中使用 Closure Table 储存无限分级数据
2019/06/06 Python
十行代码使用Python写一个USB病毒
2019/06/21 Python
TensorFlow实现模型断点训练,checkpoint模型载入方式
2020/05/26 Python
基于Pyinstaller打包Python程序并压缩文件大小
2020/05/28 Python
python 装饰器的使用示例
2020/10/10 Python
名词解释型面试题(主要是网络)
2013/12/27 面试题
国旗下的演讲稿
2014/05/08 职场文书
投标保密承诺书
2014/05/19 职场文书
会计实训报告范文
2014/11/04 职场文书
护理工作个人总结
2015/03/03 职场文书
2015年技术工作总结范文
2015/04/20 职场文书
2015年信息化建设工作总结
2015/07/23 职场文书
python 办公自动化——基于pyqt5和openpyxl统计符合要求的名单
2021/05/25 Python