Python3 MySQL数据库操作封装类详解
本文介绍了一个基于Python3的MySQL数据库操作封装类。重点解析了将数据库配置变量置于类外部以优化IO性能的设计思路,以及初始化时预创建游标以提升效率的做法。文章提供了完整的代码示例及注意事项,帮助开发者构建更健壮的数据库交互模块。
本文分享一个使用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)))
在实现该代码时,有几个关键细节需要特别注意:
第一,数据库配置文件中的变量应定义在类的外部。这样做的目的是仅在模块加载时读取一次配置,后续使用数据库类时无需重复读取。这种设计的主要优势在于减少了IO操作次数。如果脚本程序需要频繁扫描数据库,而在类初始化时才读取配置,极有可能引发IO错误或读取到的section为空,进而导致程序崩溃。其潜在缺点是修改config文件后无法即时生效。不过,通常程序部署后不会随意更改配置文件,或者在修改后会重启程序。从程序健壮性角度考虑,建议在可能抛出异常的地方添加try-catch处理,或者在mod_config.py模块中先判断section和key是否存在,再进行读取操作。
第二,数据库类在初始化阶段即完成游标的赋值,而不是在执行具体数据库操作时才去查找或创建游标。
注意:在主程序中,必须先实例化DB MySQL数据库操作类,然后再调用相关方法进行使用。
如果您对Python的其他应用感兴趣,可以查看本站的相关专题,包括《Python+MySQL数据库程序设计入门教程》、《Python常见数据库操作技巧汇总》、《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》以及《Python文件与目录操作技巧汇总》。
希望上述内容能对您的Python程序设计工作有所帮助。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









