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中的ctime()方法使用教程
May 22 Python
教大家使用Python SqlAlchemy
Feb 12 Python
Django查询数据库的性能优化示例代码
Sep 24 Python
详解Python中的动态属性和特性
Apr 07 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
Aug 05 Python
python xpath获取页面注释的方法
Jan 14 Python
详解python 模拟豆瓣登录(豆瓣6.0)
Apr 18 Python
使用django实现一个代码发布系统
Jul 18 Python
python禁用键鼠与提权代码实例
Aug 16 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
Dec 10 Python
Python with标签使用方法解析
Jan 17 Python
解决Python中的modf()函数取小数部分不准确问题
May 28 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
ADODB类使用
2006/11/25 PHP
PHP 存储文本换行实现方法
2010/01/05 PHP
php学习笔记 类的声明与对象实例化
2011/06/13 PHP
linux下php上传文件注意事项
2016/06/11 PHP
Yii2实现log输出到file及database的方法
2016/11/12 PHP
PHP数组与字符串互相转换实例
2020/05/05 PHP
jquery 动态创建元素的方式介绍及应用
2013/04/21 Javascript
基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解
2013/05/07 Javascript
javascript放大镜效果的简单实现
2013/12/09 Javascript
js中判断用户输入的值是否为空的简单实例
2013/12/23 Javascript
24款热门实用的jQuery插件推荐
2014/12/24 Javascript
JS实现合并两个数组并去除重复项只留一个的方法
2015/12/17 Javascript
js动态获取子复选项并设计全选及提交的实现方法
2016/06/24 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
OpenLayers3实现测量功能
2020/09/25 Javascript
[46:37]LGD vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
[56:57]LGD vs VP 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第一场 8.20.mp4
2019/08/22 DOTA
[48:31]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第二场 12.17
2020/12/19 DOTA
Windows下搭建python开发环境详细步骤
2020/07/20 Python
基于Django静态资源部署404的解决方法
2019/07/28 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
2019/08/12 Python
opencv实现简单人脸识别
2021/02/19 Python
django实现用户注册实例讲解
2019/10/30 Python
python 实现二维列表转置
2019/12/02 Python
pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)
2020/04/15 Python
Pycharm导入anaconda环境的教程图解
2020/07/31 Python
python 简单的调用有道翻译
2020/11/25 Python
土耳其玩具商店:Toyzz Shop
2019/08/02 全球购物
PHP两种查询函数array/row的区别
2013/06/03 面试题
出纳岗位职责模板
2013/11/27 职场文书
市场营销战略计划书
2014/05/06 职场文书
2014年服务行业工作总结
2014/11/18 职场文书
小王子读书笔记
2015/06/29 职场文书
导游词之江南园林狮子林
2019/09/16 职场文书
php字符串倒叙
2021/04/01 PHP
如何使用pdb进行Python调试
2021/06/30 Python