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中的__new__特殊方法
Jun 02 Python
详解python进行mp3格式判断
Dec 23 Python
详解python基础之while循环及if判断
Aug 24 Python
Python基于贪心算法解决背包问题示例
Nov 27 Python
python如何修改装饰器中参数
Mar 20 Python
Python全排列操作实例分析
Jul 24 Python
Python人脸识别第三方库face_recognition接口说明文档
May 03 Python
使用Python和Prometheus跟踪天气的使用方法
May 06 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
Feb 28 Python
Python通过两个dataframe用for循环求笛卡尔积
Apr 29 Python
django和flask哪个值得研究学习
Jul 31 Python
只用50行Python代码爬取网络美女高清图片
Jun 02 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
十大催泪虐心动漫电影,有几部你还没看
2020/03/04 日漫
轻松入门: 煮好咖啡的七个诀窍
2021/03/03 冲泡冲煮
编译问题
2006/10/09 PHP
深入php处理整数函数的详解
2013/06/09 PHP
解析thinkphp基本配置 convention.php
2013/06/18 PHP
php调用Google translate_tts api实现代码
2013/08/07 PHP
PHP写API输出的时用echo的原因详解
2019/04/28 PHP
限制文本框输入N个字符的js代码
2010/05/13 Javascript
eval的两组性能测试数据
2012/08/17 Javascript
js中return false(阻止)的用法
2013/08/14 Javascript
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
jQuery中:only-child选择器用法实例
2015/01/03 Javascript
第九篇Bootstrap导航菜单创建步骤详解
2016/06/21 Javascript
详解AngularJS通过ocLazyLoad实现动态(懒)加载模块和依赖
2017/03/01 Javascript
利用webstrom调试Vue.js单页面程序的方法教程
2017/06/06 Javascript
React Native实现进度条弹框的示例代码
2017/07/17 Javascript
vue展示dicom文件医疗系统的实现代码
2018/08/27 Javascript
javascript实现遮罩层动态效果实例
2019/05/14 Javascript
[01:25:33]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第二场 12.20
2020/12/23 DOTA
在Python中使用正则表达式的方法
2015/08/13 Python
判断python对象是否可调用的三种方式及其区别详解
2019/01/31 Python
读取nii或nii.gz文件中的信息即输出图像操作
2020/07/01 Python
Python单元测试及unittest框架用法实例解析
2020/07/09 Python
如何在Canvas中添加事件的方法示例
2019/05/21 HTML / CSS
美国二手奢侈品寄售网站:TheRealReal
2016/10/29 全球购物
GLAMGLOW格莱魅美国官网:美国知名的面膜品牌
2016/12/31 全球购物
大学学习生活感言
2014/01/18 职场文书
火锅店创业计划书范文
2014/02/02 职场文书
单位工程竣工验收方案
2014/03/16 职场文书
龙门石窟导游词
2015/02/02 职场文书
个人学习总结范文
2015/02/15 职场文书
幼儿园老师工作总结2015
2015/05/22 职场文书
公务员的复习计划书,请收下!
2019/07/15 职场文书
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技
十大公认最好看的动漫:《咒术回战》在榜,《钢之炼金术师》第一
2022/03/18 日漫
Python可视化神器pyecharts之绘制地理图表练习
2022/07/07 Python