Python⼀个简单的数据库类封装#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 = Config('path', 'logpath') + 'database.log'
DBNAME = Config(DB, 'dbname')
DBHOST = Config(DB, 'dbhost')
DBUSER = Config(DB, 'dbuser')
DBPWD = Config(DB, 'dbpassword')
DBCHARSET = Config(DB, 'dbcharset')
DBPORT = Config(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 = tMySQL()
if(self._conn):
self._cursor = self._conn.cursor()
#数据库连接
def connectMySQL(self):
conn = False
try:
conn = t(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._("connect database failed, %s" % data)
conn = False
数据库简单吗
return conn
#获取查询结果集
def fetch_all(self, sql):
res = ''
if(self._conn):
try:
self._ute(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._ute(sql)
self._connmit()
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数据库操作类。再进⾏⽅法使⽤!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论