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 相关文章推荐
在主机商的共享服务器上部署Django站点的方法
Jul 22 Python
详解Python如何获取列表(List)的中位数
Aug 12 Python
Python 专题二 条件语句和循环语句的基础知识
Mar 19 Python
Python实现一个转存纯真IP数据库的脚本分享
May 21 Python
基于python 字符编码的理解
Sep 02 Python
Scrapy的简单使用教程
Oct 24 Python
python机器学习理论与实战(四)逻辑回归
Jan 19 Python
Python 使用PIL numpy 实现拼接图片的示例
May 08 Python
Python 输入一个数字判断成绩分数等级的方法
Nov 15 Python
windows中安装Python3.8.0的实现方法
Nov 19 Python
Python3 解决读取中文文件txt编码的问题
Dec 20 Python
通过实例解析python创建进程常用方法
Jun 19 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的安全
2006/10/09 PHP
一个域名查询的程序
2006/10/09 PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
2019/04/02 PHP
PHP实现八皇后算法
2019/05/06 PHP
JavaScript 学习笔记(九)call和apply方法
2010/01/11 Javascript
JS 各种网页尺寸判断实例方法
2013/04/18 Javascript
setTimeout函数兼容各主流浏览器运行执行效果实例
2013/06/13 Javascript
js 弹出框只弹一次(二次修改之后的)
2013/11/26 Javascript
jquery自动切换tabs选项卡的具体实现
2013/12/24 Javascript
详解AngularJS中的表达式使用
2015/06/16 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
2016/12/28 Javascript
通过sails和阿里大于实现短信验证
2017/01/04 Javascript
node文字生成图片的示例代码
2017/10/26 Javascript
浅谈 Vue 项目优化的方法
2017/12/16 Javascript
详解vue使用插槽分发内容slot的用法
2019/03/28 Javascript
vue 对axios get pust put delete封装的实例代码
2020/01/05 Javascript
Openlayers实现扩散的动态点(水纹效果)
2020/08/17 Javascript
OpenLayers3实现图层控件功能
2020/09/25 Javascript
[00:43]FTP典藏礼包 DOTA2三大英雄霸气新套装
2014/03/21 DOTA
[01:11:08]Winstrike vs NB 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
详解Django中的form库的使用
2015/07/18 Python
Django实现全文检索的方法(支持中文)
2018/05/14 Python
解决pandas 作图无法显示中文的问题
2018/05/24 Python
matplotlib subplots 设置总图的标题方法
2018/05/25 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
澳大利亚在线生活方式商店:Mytopia
2018/07/08 全球购物
澳洲CFL商城:CHEMIST FOR LESS(中文)
2021/02/28 全球购物
GOLFINO英国官网:高尔夫服装
2020/04/11 全球购物
编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
2014/01/07 面试题
工作交流会欢迎词
2014/01/12 职场文书
大学生团员个人总结
2015/02/14 职场文书
个人工作表现自我评价
2015/03/06 职场文书
听课评课活动心得体会
2016/01/15 职场文书
PyCharm 安装与使用配置教程(windows,mac通用)
2021/05/12 Python
Python闭包的定义和使用方法
2022/04/11 Python
Python中的协程(Coroutine)操作模块(greenlet、gevent)
2022/05/30 Python