Python3實(shí)現(xiàn)的Mysql數(shù)據(jù)庫操作封裝類
本文實(shí)例講述了Python3實(shí)現(xiàn)的Mysql數(shù)據(jù)庫操作封裝類。分享給大家供大家參考,具體如下:
#encoding:utf-8
#name:mod_db.py
'''''
使用方法:1.在主程序中先實(shí)例化DB Mysql數(shù)據(jù)庫操作類。
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)
#數(shù)據(jù)庫操作類
class database:
#注,python的self等于其它語言的this
def __init__(self, dbname=None, dbhost=None):
self._logger = logger
#這里的None相當(dāng)于其它語言的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()
#數(shù)據(jù)庫連接
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
#獲取查詢結(jié)果集
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
#關(guān)閉數(shù)據(jù)庫連接
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)))
這段代碼需要注意幾個(gè)地方:
1.數(shù)據(jù)庫配置文件變量放在類外面,只在模塊被載入的時(shí)候讀一次,在使用數(shù)據(jù)庫類時(shí),無需再讀取。這樣有一個(gè)好處就是減少了IO的操作。如果是腳本程序需要不停的掃數(shù)據(jù)庫,放在類初始化的時(shí)候讀數(shù)據(jù)庫配置,那么很有可能造成IO錯(cuò)誤,或者讀到的section為空,從而導(dǎo)致程序down掉。不好的地方就是如果修改了config,無法及時(shí)更新。不過一般程序部署后,不會(huì)隨意修改config文件,或者在修改config文件后,重新啟動(dòng)程序。不過從程序的健壯性考慮,可以在可能會(huì)拋出異常的地方try,catch一下,更好的辦法是,在mod_config.py模塊中判斷一下該section和key是否存在,然后再讀取。
2.數(shù)據(jù)庫類在初始化的時(shí)候,就將游標(biāo)賦給它,而不是在進(jìn)行數(shù)據(jù)庫操作的時(shí)候再尋找游標(biāo)。
PS:在主程序中先實(shí)例化DB Mysql數(shù)據(jù)庫操作類。再進(jìn)行方法使用!
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python+MySQL數(shù)據(jù)庫程序設(shè)計(jì)入門教程》、《Python常見數(shù)據(jù)庫操作技巧匯總》、《Python數(shù)學(xué)運(yùn)算技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
三步解決python PermissionError: [WinError 5]拒絕訪問的情況
這篇文章主要介紹了三步解決python PermissionError: [WinError 5]拒絕訪問的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04
Python多線程實(shí)現(xiàn)支付模擬請(qǐng)求過程解析
這篇文章主要介紹了python多線程實(shí)現(xiàn)支付模擬請(qǐng)求過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
使用Python+Flask開發(fā)博客項(xiàng)目并實(shí)現(xiàn)內(nèi)網(wǎng)穿透
Flask是一個(gè)使用python編寫的輕量級(jí)Web框架,這篇文章我們將使用這個(gè)框架編寫一個(gè)屬于自己的博客網(wǎng)站!并教你如何通過使用內(nèi)網(wǎng)穿透工具處理項(xiàng)目,讓本地的項(xiàng)目可以在公網(wǎng)訪問,感興趣的可以了解一下2021-11-11
python用opencv批量截取圖像指定區(qū)域的方法
今天小編就為大家分享一篇python用opencv批量截取圖像指定區(qū)域的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01
Python?Matplotlib繪制扇形圖標(biāo)簽重疊問題解決過程
在使用Matplotlib畫圖時(shí),常會(huì)遇到標(biāo)簽重疊問題的時(shí)候,所以下面這篇文章主要給大家介紹了關(guān)于Python?Matplotlib繪制扇形圖標(biāo)簽重疊問題的解決過程,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
django2用iframe標(biāo)簽完成網(wǎng)頁內(nèi)嵌播放b站視頻功能
這篇文章主要介紹了django2 用iframe標(biāo)簽完成 網(wǎng)頁內(nèi)嵌播放b站視頻功能,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-06-06
詳解Python的Flask框架中生成SECRET_KEY密鑰的方法
密鑰值的生成功能十分重要,幾乎也是各大Web開發(fā)框架的標(biāo)配,Flask當(dāng)然也不例外,這里我們就來詳解Python的Flask框架中生成SECRET_KEY密鑰的方法2016-06-06

