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实现中文转换url编码的方法
Jun 14 Python
Python3.遍历某文件夹提取特定文件名的实例
Apr 26 Python
python使用thrift教程的方法示例
Mar 21 Python
Python 中pandas索引切片读取数据缺失数据处理问题
Oct 09 Python
Python读写操作csv和excle文件代码实例
Mar 16 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
Apr 16 Python
Python-jenkins模块获取jobs的执行状态操作
May 12 Python
浅谈pytorch中torch.max和F.softmax函数的维度解释
Jun 28 Python
Win10环境中如何实现python2和python3并存
Jul 20 Python
python如何快速生成时间戳
Jul 21 Python
Python logging日志库空间不足问题解决
Sep 14 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
Jan 27 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采集腾讯微博的实现代码
2012/01/19 PHP
php判断一个数组是否为有序的方法
2015/03/27 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
2020/01/26 PHP
JS继承--原型链继承和类式继承
2013/04/08 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
jQuery中delegate()方法的用法详解
2016/10/13 Javascript
JavaScript高仿支付宝倒计时页面及代码实现
2016/10/21 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
React Native仿美团下拉菜单的实例代码
2017/08/08 Javascript
Bootstrap Table快速完美搭建后台管理系统
2017/09/20 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
vue注册组件的几种方式总结
2018/03/08 Javascript
element UI upload组件上传附件格式限制方法
2018/09/04 Javascript
node微信开发之获取access_token+自定义菜单
2019/03/17 Javascript
ionic+html5+API实现双击返回键退出应用
2019/09/17 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
[16:19]教你分分钟做大人——风暴之灵
2015/03/11 DOTA
深入浅析python定时杀进程
2016/06/06 Python
python如何将两个txt文件内容合并
2019/10/18 Python
pygame库实现移动底座弹球小游戏
2020/04/14 Python
pycharm 中mark directory as exclude的用法详解
2020/02/14 Python
Python之Django自动实现html代码(下拉框,数据选择)
2020/03/13 Python
django项目中使用云片网发送短信验证码的实现
2021/01/19 Python
英国领先的电动可调床制造商:Laybrook
2019/12/26 全球购物
C# .NET面试题
2015/11/28 面试题
人力资源作业细则
2014/03/03 职场文书
中考冲刺决心书
2014/03/11 职场文书
幼儿园教师获奖感言
2014/03/11 职场文书
安全责任书范本
2014/04/15 职场文书
工程造价专业求职信
2014/07/17 职场文书
2014年安全工作总结范文
2014/11/13 职场文书
军训个人总结
2015/03/03 职场文书
教师创先争优承诺书
2015/04/27 职场文书
幼儿园开学温馨提示
2015/07/15 职场文书
2016年小学生清明节广播稿
2015/12/17 职场文书
2016年党支部公开承诺书
2016/03/25 职场文书