1. 程式人生 > >Python使用MySQLdb封裝基本操作類

Python使用MySQLdb封裝基本操作類

經常用到python操作mysql資料庫,於是自己封裝了基本操作mysql資料庫的類,持續更新

# -*- coding:utf-8 -*-
import MySQLdb
import datetime
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

#封裝MySQLdb類基本操作mysqldb


class mysqldb:
        conn = ''
        cursor = ''
        def __init__(self,host1='localhost',user1='root',passwd1='www'
,database1='test',charset1='utf8')
:
try: print 'init_ ok' self.conn=MySQLdb.connect(host=host1,user=user1,passwd=passwd1,db=database1,port=3306,charset=charset1); self.cursor = self.conn.cursor(MySQLdb.cursors.DictCursor) except MySQLdb.Error,e: error = 'Connect failed! ERROR (%s): %s'
%(e.args[0],e.args[1]) print error sys.exit() #針對讀操作返回結果集 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 #sys.exit() #針對更新,刪除,事務等操作失敗時回滾 def _exeCuteCommit(self,sql=''): try: self.cursor = self.conn.cursor() self.cursor.execute(sql) 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 = '`id` bigint(11) NOT NULL AUTO_INCREMENT,' 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) #查詢表內容 #cond_dict:{'name':'xiaoming'...} #order:'order by id desc' def _select(self,table,cond_dict='',order=''): 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 _insert(self,table,attrs,value): #values_sql = ['%s' for v in attrs] attrs_sql = '('+','.join(attrs)+')' values_sql = ' values('+','.join(value)+')' sql = 'insert into %s'%table sql = sql + attrs_sql + values_sql print '_insert:'+sql self._exeCuteCommit(sql) #插入多條資料 #attrs:[id,name,...] #values:[[1,'jack'],[2,'rose']] def _insertMany(self,table,attrs,values): 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: print sql #print values 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 _now(self): now0 = datetime.datetime.now() now = now0.strftime('%Y-%m-%d %H:%M:%S') print now def _close(self): self.cursor.close() self.conn.close() def __del__(self): self._close() if __name__ == '__main__': a = mysqldb('localhost','root','www','test','utf8') a._now() table='test_mysqldb' attrs={'name':'varchar(200) DEFAULT NULL','age':'int(11) DEFAULT NULL'} constraint='PRIMARY KEY(`id`)' a._createTable(table,attrs,constraint) col = ['name','age'] val = ['\'xiegonghai\'','25'] a._insert('test_mysqldb',col,val) print a._select(table)