python操作数据库工具类
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                python操作数据库工具类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                
                            
                            
                            <pre name="code" class="python">#!/usr/bin/python  
# -*- coding: utf-8 -*-  """  
Created on 2016年11月5日  @author: hongyi
1、執行帶參數的SQL時,請先用sql語句指定需要輸入的條件列表,然后再用tuple/list進行條件批配  
2、在格式SQL中不需要使用引號指定數據類型,系統會根據輸入參數自動識別  
3、在輸入的值中不需要使用轉意函數,系統會自動處理  
"""    import MySQLdb     
import Config    
import sys  
from MySQLdb.cursors import DictCursor    
from DBUtils.PooledDB import PooledDB   
reload(sys)  
sys.setdefaultencoding('utf-8')  """  
Config是一些數據庫的配置文件  
"""    class Mysql(object):    """  MYSQL數據庫對象,負責產生數據庫連接 , 此類中的連接采用連接池實現獲取連接對象:conn = Mysql.getConn()  釋放連接對象;conn.close()或del conn  """    #連接池對象    __pool = None    def __init__(self):    #數據庫構造函數,從連接池中取出連接,并生成操作游標    try:  self._conn = Mysql.__getConn()    self._cursor = self._conn.cursor()   except Exception, e:  error = 'Connect failed! ERROR (%s): %s' %(e.args[0],e.args[1])  print error  sys.exit()  @staticmethod    def __getConn():    """  @summary: 靜態方法,從連接池中取出連接  @return MySQLdb.connection  """    if Mysql.__pool is None:    __pool = PooledDB(creator=MySQLdb, mincached=1 , maxcached=20 ,    host=Config.DBHOST , port=Config.DBPORT ,user=Config.DBUSER , passwd=Config.DBPWD ,    db=Config.DBNAME,use_unicode=False,charset=Config.DBCHAR,cursorclass=DictCursor)    return __pool.connection()    #針對讀操作返回結果集  def _exeCute(self,sql=''):  try:  self._cursor.execute(sql)  records = self._cursor.fetchall()  return records  except MySQLdb.Error,e:  error = 'MySQL execute failed! ERROR (%s): %s' %(e.args[0],e.args[1])  print error  #針對更新,刪除,事務等操作失敗時回滾  def _exeCuteCommit(self,sql='',arg=None): try:  if arg is None:    self._cursor.execute(sql)    else:    self._cursor.execute(sql,arg)self._conn.commit()  except MySQLdb.Error,e:  self._conn.rollback()  error = 'MySQL execute failed! ERROR (%s): %s' %(e.args[0],e.args[1])  print error  #sys.exit()  #創建表          #tablename:表名稱,attr_dict:屬性鍵值對,constraint:主外鍵約束  #attr_dict:{'book_name':'varchar(200) NOT NULL'...}  #constraint:PRIMARY KEY(`id`)  def _createTable(self,table,attr_dict,constraint):  sql = ''  # sql_mid = '`row_id` bigint(11) NOT NULL AUTO_INCREMENT,'  sql_mid = ''for attr,value in attr_dict.items():  sql_mid = sql_mid + '`'+attr + '`'+' '+ value+','  sql = sql + 'CREATE TABLE IF NOT EXISTS %s ('%table  sql = sql + sql_mid  sql = sql + constraint  sql = sql + ') ENGINE=InnoDB DEFAULT CHARSET=utf8'  print '_createTable:'+sql  self._exeCuteCommit(sql)  def insertOne(self,sql,value=None):    """  @summary: 向數據表插入一條記錄  @param sql:要插入的SQL格式  @param value:要插入的記錄數據tuple/list  @return: insertId 受影響的行數  """    self._exeCuteCommit(sql,value)return self.__getInsertId() def _insert(self,table,attrs,value):"""@summary: 向數據表插入一條記錄 @param attrs = [] :要插入的屬性@param value = [] :要插入的數據值 """  #values_sql = ['%s' for v in attrs]  attrs_sql = '('+','.join(attrs)+')'  value_str = self._transferContent(value)values_sql = ' values('+  value_str +')' sql = 'insert into %s' %table  sql = sql + attrs_sql +  values_sql  print '_insert:'+sql  self._exeCuteCommit(sql)  def _insertDic(self,table,attrs):"""@summary: 向數據表插入一條記錄 @param attrs = {"colNmae:value"} :要插入的屬性:數據值"""  attrs_sql = '('+','.join(attrs.keys())+')'  value_str = self._transferContent(attrs.values()) #','.join(attrs.values())values_sql = ' values('+ value_str  +')' sql = 'insert into %s' %table  sql = sql + attrs_sql +  values_sql  print '_insert:'+sql  self._exeCuteCommit(sql) #將list轉為字符串def _transferContent(self, content):if content is None:return Noneelse:Strtmp = ""for col in content:if Strtmp == "":Strtmp = "\"" + col + "\""else:Strtmp += "," + "\"" + col + "\""return Strtmpdef _insertMany(self,table,attrs,values): """@summary: 向數據表插入多條數據  @param attrs = [id,name,...]  :要插入的屬性@param values = [[1,'jack'],[2,'rose']] :要插入的數據值"""  values_sql = ['%s' for v in attrs]  attrs_sql = '('+','.join(attrs)+')'  values_sql = ' values('+','.join(values_sql)+')'  sql = 'insert into %s'%table  sql = sql + attrs_sql + values_sql  print '_insertMany:'+sql  try:  for i in range(0,len(values),20000):  self._cursor.executemany(sql,values[i:i+20000])  self._conn.commit()  except MySQLdb.Error,e:  self._conn.rollback()  error = '_insertMany executemany failed! ERROR (%s): %s' %(e.args[0],e.args[1])  print error  sys.exit()  def insertMany(self,sql,values=None):    """  @summary: 向數據表插入多條記錄  @param sql:要插入的SQL格式  @param values:要插入的記錄數據tuple(tuple)/list[list]  @return: count 受影響的行數  """try:  if values is None:    count = self._cursor.executemany(sql)    else:    count =  self._cursor.execute(sql,values)self._conn.commit()  except MySQLdb.Error,e:  self._conn.rollback()  error = 'MySQL execute failed! ERROR (%s): %s' %(e.args[0],e.args[1])  print error  sys.exit() return countdef _select(self,table,cond_dict='',order=''): """@summary: 執行條件查詢,并取出所有結果集@cond_dict:{'name':'xiaoming'...}  @order:'order by id desc'@return:  result ({"col":"val","":""},{})""" consql = ' '  if cond_dict!='':  for k,v in cond_dict.items():  consql = consql+k+'='+v+' and'  consql = consql + ' 1=1 '  sql = 'select * from %s where '%table  sql = sql + consql + order  print '_select:'+sql  return self._exeCute(sql)  def __getInsertId(self):    """  獲取當前連接最后一次插入操作生成的id,如果沒有則為0  """    self._cursor.execute("SELECT @@IDENTITY AS id")    result = self._cursor.fetchall()    return result[0]['id']    def __query(self,sql,param=None):    if param is None:    count = self._cursor.execute(sql)    else:    count = self._cursor.execute(sql,param)    return count   def getAll(self,sql,param=None):    """  @summary: 執行查詢,并取出所有結果集  @param sql:查詢SQL,如果有查詢條件,請只指定條件列表,并將條件值使用參數[param]傳遞進來  @param param: 可選參數,條件列表值(元組/列表)  @return: result list(字典對象)/boolean 查詢到的結果集 """    if param is None:    count = self._cursor.execute(sql)    else:    count = self._cursor.execute(sql,param)    if count>0:    result = self._cursor.fetchall()    else:    result = False    return result    def getOne(self,sql,param=None):    """  @summary: 執行查詢,并取出第一條  @param sql:查詢SQL,如果有查詢條件,請只指定條件列表,并將條件值使用參數[param]傳遞進來  @param param: 可選參數,條件列表值(元組/列表)  @return: result list/boolean 查詢到的結果集  """    if param is None:    count = self._cursor.execute(sql)    else:    count = self._cursor.execute(sql,param)    if count>0:    result = self._cursor.fetchone()    else:    result = False    return result    def getMany(self,sql,num,param=None):    """  @summary: 執行查詢,并取出num條結果  @param sql:查詢SQL,如果有查詢條件,請只指定條件列表,并將條件值使用參數[param]傳遞進來  @param num:取得的結果條數  @param param: 可選參數,條件列表值(元組/列表)  @return: result list/boolean 查詢到的結果集  """    count = self.__query(sql,parm)if count>0:    result = self._cursor.fetchmany(num)    else:    result = False    return result    def update(self,sql,param=None):    """  @summary: 更新數據表記錄  @param sql: SQL格式及條件,使用(%s,%s)  @param param: 要更新的  值 tuple/list  @return: count 受影響的行數  """    return self._exeCuteCommit(sql,param)    def delete(self,sql,param=None):    """  @summary: 刪除數據表記錄  @param sql: SQL格式及條件,使用(%s,%s)  @param param: 要刪除的條件 值 tuple/list  @return: count 受影響的行數  """    return self._exeCuteCommit(sql,param)    def begin(self):    """  @summary: 開啟事務  """    self._conn.autocommit(0)    def end(self,option='commit'):    """  @summary: 結束事務  """    if option=='commit':    self._conn.commit()    else:    self._conn.rollback()    def dispose(self,isEnd=1):    """  @summary: 釋放連接池資源  """    if isEnd==1:    self.end('commit')    else:    self.end('rollback');    self._cursor.close()    self._conn.close()    
 
                            
                        
                        
                        總結
以上是生活随笔為你收集整理的python操作数据库工具类的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 查看笔记本预装系统的产品密钥
- 下一篇: 排列组合数计算
