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计算牛顿迭代多项式实例分析
May 07 Python
python学习笔记之调用eval函数出现invalid syntax错误问题
Oct 18 Python
Python list操作用法总结
Nov 10 Python
Python通过属性手段实现只允许调用一次的示例讲解
Apr 21 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
May 27 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
Jan 10 Python
python递归调用中的坑:打印有值, 返回却None
Mar 16 Python
python使用hdfs3模块对hdfs进行操作详解
Jun 06 Python
python里的单引号和双引号的有什么作用
Jun 17 Python
Python Opencv轮廓常用操作代码实例解析
Sep 01 Python
python爬虫中的url下载器用法详解
Nov 30 Python
用Python远程登陆服务器的步骤
Apr 16 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
提问的智慧
2006/10/09 PHP
生成缩略图
2006/10/09 PHP
PHP number_format() 函数定义和用法
2012/06/01 PHP
PHP文章采集URL补全函数(FormatUrl)
2012/08/02 PHP
微信推送功能实现方式图文详解
2019/07/12 PHP
jquery 屏蔽一个区域内的所有元素,禁止输入
2009/10/22 Javascript
Jquery和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
2013/06/17 Javascript
jQuery中remove()方法用法实例
2014/12/25 Javascript
jquery制作多功能轮播图插件
2015/04/02 Javascript
浅析AngularJS Filter用法
2015/12/28 Javascript
js代码延迟一定时间后执行一个函数的实例
2017/02/15 Javascript
原生javascript实现读写CSS样式的方法详解
2017/02/20 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
2017/04/27 jQuery
了解VUE的render函数的使用
2017/06/08 Javascript
详解vue组件通信的三种方式
2017/06/30 Javascript
nodeJs爬虫的技术点总结
2018/05/13 NodeJs
vue根据进入的路由进行原路返回的方法
2018/09/26 Javascript
angular 未登录状态拦截路由跳转的方法
2018/10/09 Javascript
微信小程序使用 vant Dialog组件的正确方式
2020/02/21 Javascript
[02:51]DOTA2英雄基础教程 风暴之灵
2013/12/23 DOTA
[43:24]VG vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python中比较特别的除法运算和幂运算介绍
2015/04/05 Python
python实现将汉字转换成汉语拼音的库
2015/05/05 Python
从局部变量和全局变量开始全面解析Python中变量的作用域
2016/06/16 Python
python timestamp和datetime之间转换详解
2017/12/11 Python
python读写csv文件并增加行列的实例代码
2019/08/01 Python
python3反转字符串的3种方法(小结)
2019/11/07 Python
Python之——生成动态路由轨迹图的实例
2019/11/22 Python
django实现将后台model对象转换成json对象并传递给前端jquery
2020/03/16 Python
Python HTTP下载文件并显示下载进度条功能的实现
2020/04/02 Python
Python使用Numpy模块读取文件并绘制图片
2020/05/13 Python
pandas之分组groupby()的使用整理与总结
2020/06/18 Python
英国婚礼商城:Wedding Mall
2019/11/02 全球购物
C#面试常见问题
2013/02/25 面试题
学雷锋标兵事迹材料
2014/08/18 职场文书
国际贸易实训总结
2015/08/03 职场文书