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中实现点击图片链接强制直接下载的方法
May 14 Python
详解python中的json和字典dict
Jun 22 Python
使用python验证代理ip是否可用的实现方法
Jul 25 Python
深入解析python中的实例方法、类方法和静态方法
Mar 11 Python
python批量读取文件名并写入txt文件中
Sep 05 Python
python银行系统实现源码
Oct 25 Python
pymysql的简单封装代码实例
Jan 08 Python
pycharm 更改创建文件默认路径的操作
Feb 15 Python
django model的update时auto_now不被更新的原因及解决方式
Apr 01 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
May 25 Python
Python matplotlib模块及柱状图用法解析
Aug 10 Python
python从ftp获取文件并下载到本地
Dec 05 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
在Windows中安装Apache2和PHP4的权威指南
2006/10/09 PHP
二招解决php乱码问题
2012/03/25 PHP
thinkphp下MySQL数据库读写分离代码剖析
2017/04/18 PHP
PHP的mysqli_thread_id()函数讲解
2019/01/24 PHP
DB.ASP 用Javascript写ASP很灵活很好用很easy
2011/07/31 Javascript
jquery隐藏标签和显示标签的实例
2013/11/11 Javascript
跨域资源共享 CORS 详解
2016/04/26 Javascript
Bootstrap菜单按钮及导航实例解析
2016/09/09 Javascript
Nodejs进阶:基于express+multer的文件上传实例
2016/11/21 NodeJs
微信小程序 使用canvas制作K线实例详解
2017/01/12 Javascript
在js代码拼接dom对象到页面上去的模板总结(必看)
2017/02/14 Javascript
原生JS实现圣旨卷轴展开效果
2017/03/06 Javascript
使用jQuery,Angular实现登录界面验证码详解
2017/04/27 jQuery
浅谈angular.copy() 深拷贝
2017/09/14 Javascript
利用vue组件自定义v-model实现一个Tab组件方法示例
2017/12/06 Javascript
vue.js整合vux中的上拉加载下拉刷新实例教程
2018/01/09 Javascript
jQuery中内容过滤器简单用法示例
2018/03/31 jQuery
Vue递归实现树形菜单方法实例
2018/11/06 Javascript
vue的keep-alive中使用EventBus的方法
2019/04/23 Javascript
jQuery/JS监听input输入框值变化实例
2019/10/17 jQuery
关于Python内存分配时的小秘密分享
2019/09/05 Python
基于TensorFlow的CNN实现Mnist手写数字识别
2020/06/17 Python
捷克体育用品购物网站:D-sport
2017/12/28 全球购物
东南亚旅游平台:The Trip Guru
2018/01/01 全球购物
2014年商场超市庆元旦活动方案
2014/02/14 职场文书
幼儿教师培训感言
2014/03/08 职场文书
小学数学国培感言
2014/03/10 职场文书
学术会议主持词
2014/03/17 职场文书
文明工地标语
2014/06/16 职场文书
关于感恩的演讲稿400字
2014/08/26 职场文书
学习三严三实心得体会
2014/10/13 职场文书
期末考试复习计划
2015/01/19 职场文书
工程部部长岗位职责
2015/02/12 职场文书
高中历史教学反思
2016/02/19 职场文书
民事纠纷协议书
2016/03/23 职场文书
MySQL 角色(role)功能介绍
2021/04/24 MySQL