[Python]単純なデータベースクラス
#encoding:utf-8
#name:mod_db.py
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:
def __init__(self, dbname=None, dbhost=None):
self._logger = logger
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が空になったりして、プログラムがダウンする可能性があります.悪いのはconfigを修正した場合、すぐに更新できないことです.ただし、一般的なプログラムの導入後、configファイルを勝手に変更したり、configファイルを変更した後、プログラムを再起動したりすることはありません.しかし、プログラムの丈夫さから考えると、異常を投げ出す可能性がある場所try、catchで、mod_config.pyモジュールでは,そのsectionとkeyが存在するか否かを判断してから読み出す.
2.データベース・クラスは、初期化時にカーソルを割り当て、データベース操作時にカーソルを探すのではなく、初期化時にカーソルを割り当てます.
転載先:https://www.cnblogs.com/gmark/archive/2012/09/09/2678037.html