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使用smtplib模块通过gmail实现邮件发送的方法
May 08 Python
基于Python如何使用AIML搭建聊天机器人
Jan 27 Python
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
Nov 02 Python
Python 操作MySQL详解及实例
Apr 30 Python
Python数据结构与算法之二叉树结构定义与遍历方法详解
Dec 12 Python
图解Python变量与赋值
Apr 03 Python
Python中的CSV文件使用"with"语句的方式详解
Oct 16 Python
Python实现随机创建电话号码的方法示例
Dec 07 Python
Python实现多态、协议和鸭子类型的代码详解
May 05 Python
set在python里的含义和用法
Jun 24 Python
Python Unittest原理及基本使用方法
Nov 06 Python
python 从list中随机取值的方法
Nov 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
PHP 远程关机实现代码
2009/11/10 PHP
ezSQL PHP数据库操作类库
2010/05/16 PHP
thinkPHP导出csv文件及用表格输出excel的方法
2015/12/30 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
PHP输出Excel PHPExcel的方法
2018/07/26 PHP
jQuery 解析xml文件
2009/08/09 Javascript
基于JQuery 的消息提示框效果代码
2011/07/31 Javascript
javascript中关于break,continue的特殊用法与介绍
2012/05/24 Javascript
jQuery function的正确书写方法
2013/08/02 Javascript
JS:window.onload的使用介绍
2013/11/13 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
javascript中使用正则计算中文长度的例子
2014/04/29 Javascript
jQuery学习笔记之创建DOM元素
2015/01/19 Javascript
jQuery简单入门示例之用户校验demo示例
2016/07/09 Javascript
微信小程序之ES6与事项助手的功能实现
2016/11/30 Javascript
JS实现网站楼层导航效果代码实例
2020/06/16 Javascript
Python 字符串大小写转换的简单实例
2017/01/21 Python
Python numpy.zero() 初始化矩阵实例
2019/11/27 Python
python数字类型math库原理解析
2020/03/02 Python
完美解决keras保存好的model不能成功加载问题
2020/06/11 Python
Algenist奥杰尼官网:微藻抗衰老护肤品牌
2017/07/15 全球购物
Java平台和其他软件平台有什么不同
2015/06/05 面试题
第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?
2016/04/28 面试题
你所在的项目是如何确定版本号的
2015/12/28 面试题
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
初任培训自我鉴定
2013/10/07 职场文书
科室工作个人总结的自我评价
2013/10/29 职场文书
住宅质量保证书
2014/04/29 职场文书
小学竞选班长演讲稿
2014/09/09 职场文书
教师考核表个人总结
2015/02/12 职场文书
担保贷款承诺书
2015/04/30 职场文书
银行柜员工作心得体会
2016/01/23 职场文书
我的暑假生活作文(五年级)范文
2019/08/07 职场文书
2019年健身俱乐部的创业计划书
2019/08/26 职场文书
pytorch--之halfTensor的使用详解
2021/05/24 Python
css实现左上角飘带效果的完整代码
2022/03/18 HTML / CSS