pythonè¿æ¥Mysqlæ°æ®åºï¼
pythonç¼ç¨ä¸å¯ä»¥ä½¿ç¨MySQLdbè¿è¡æ°æ®åºçè¿æ¥åè¯¸å¦æ¥è¯¢/æå ¥/æ´æ°çæä½ï¼ä½æ¯æ¯æ¬¡è¿æ¥mysqlæ°æ®åºè¯·æ±æ¶ï¼é½æ¯ç¬ç«çå»è¯·æ±è®¿é®ï¼ç¸å½æµªè´¹èµæºï¼èä¸è®¿é®æ°éè¾¾å°ä¸å®æ°éæ¶ï¼å¯¹mysqlçæ§è½ä¼äº§çè¾å¤§çå½±åãå æ¤ï¼å®é 使ç¨ä¸ï¼é常ä¼ä½¿ç¨æ°æ®åºçè¿æ¥æ± ææ¯ï¼æ¥è®¿é®æ°æ®åºè¾¾å°èµæºå¤ç¨çç®çã

pythonçæ°æ®åºè¿æ¥æ± å DBUtilsï¼
DBUtilsæ¯ä¸å¥Pythonæ°æ®åºè¿æ¥æ± å ï¼å¹¶å 许对é线ç¨å®å ¨çæ°æ®åºæ¥å£è¿è¡çº¿ç¨å®å ¨å è£ ãDBUtilsæ¥èªWebware for Pythonã
DBUtilsæä¾ä¸¤ç§å¤é¨æ¥å£ï¼
* PersistentDB ï¼æä¾çº¿ç¨ä¸ç¨çæ°æ®åºè¿æ¥ï¼å¹¶èªå¨ç®¡çè¿æ¥ã
* PooledDB ï¼æä¾çº¿ç¨é´å¯å ±äº«çæ°æ®åºè¿æ¥ï¼å¹¶èªå¨ç®¡çè¿æ¥ã
ä¸è½½å°åï¼DBUtils ä¸è½½è§£ååï¼ä½¿ç¨python setup.py install å½ä»¤è¿è¡å®è£
ä¸é¢å©ç¨MySQLdbåDBUtils建ç«èªå·±çmysqlæ°æ®åºè¿æ¥æ± å·¥å ·å
å¨å·¥ç¨ç®å½ä¸æ°å»ºpackageå½å为:dbConnecttionï¼å¹¶æ°å»ºmoduleå½å为MySqlConnï¼ä¸é¢æ¯MySqlConn.pyï¼è¯¥æ¨¡åå建Mysqlçè¿æ¥æ± 对象ï¼å¹¶å建äºå¦æ¥è¯¢/æå ¥çéç¨çæä½æ¹æ³ã该é¨å代ç å®ç°å¦ä¸ï¼
# -*- coding: UTF-8 -*-
"""
Created on 2016å¹´5æ7æ¥
@author: baocheng
1ãæ§è¡å¸¦åæ°çSQLæ¶ï¼è¯·å ç¨sqlè¯å¥æå®éè¦è¾å ¥çæ¡ä»¶å表ï¼ç¶ååç¨tuple/listè¿è¡æ¡ä»¶æ¹é
ï¼ã卿 ¼å¼ï¼³ï¼±ï¼¬ä¸ä¸éè¦ä½¿ç¨å¼å·æå®æ°æ®ç±»åï¼ç³»ç»ä¼æ ¹æ®è¾å ¥åæ°èªå¨è¯å«
ï¼ãå¨è¾å ¥çå¼ä¸ä¸éè¦ä½¿ç¨è½¬æå½æ°ï¼ç³»ç»ä¼èªå¨å¤ç
"""
import MySQLdb
from MySQLdb.cursors import DictCursor
from DBUtils.PooledDB import PooledDB
#from PooledDB import PooledDB
import Config
"""
Configæ¯ä¸äºæ°æ®åºçé ç½®æä»¶
"""
class Mysql(object):
"""
MYSQLæ°æ®åºå¯¹è±¡ï¼è´è´£äº§çæ°æ®åºè¿æ¥ , æ¤ç±»ä¸çè¿æ¥éç¨è¿æ¥æ± å®ç°è·åè¿æ¥å¯¹è±¡ï¼conn = Mysql.getConn()
éæ¾è¿æ¥å¯¹è±¡;conn.close()ædel conn
"""
#è¿æ¥æ± 对象
__pool = None
def __init__(self):
#æ°æ®åºæé 彿°ï¼ä»è¿æ¥æ± ä¸ååºè¿æ¥ï¼å¹¶çææä½æ¸¸æ
self._conn = Mysql.__getConn()
self._cursor = self._conn.cursor()
@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 getAll(self,sql,param=None):
"""
@summary: æ§è¡æ¥è¯¢ï¼å¹¶ååºææç»æé
@param 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:æ¥è¯¢ï¼³ï¼±ï¼¬ï¼å¦æææ¥è¯¢æ¡ä»¶ï¼è¯·åªæå®æ¡ä»¶å表ï¼å¹¶å°æ¡ä»¶å¼ä½¿ç¨åæ°[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:æ¥è¯¢ï¼³ï¼±ï¼¬ï¼å¦æææ¥è¯¢æ¡ä»¶ï¼è¯·åªæå®æ¡ä»¶å表ï¼å¹¶å°æ¡ä»¶å¼ä½¿ç¨åæ°[param]ä¼ éè¿æ¥
@param num:åå¾çç»ææ¡æ°
@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.fetchmany(num)
else:
result = False
return result
def insertOne(self,sql,value):
"""
@summary: åæ°æ®è¡¨æå ¥ä¸æ¡è®°å½
@param sql:è¦æå ¥çï¼³ï¼±ï¼¬æ ¼å¼
@param value:è¦æå ¥çè®°å½æ°æ®tuple/list
@return: insertId åå½±åçè¡æ°
"""
self._cursor.execute(sql,value)
return self.__getInsertId()
def insertMany(self,sql,values):
"""
@summary: åæ°æ®è¡¨æå ¥å¤æ¡è®°å½
@param sql:è¦æå ¥çï¼³ï¼±ï¼¬æ ¼å¼
@param values:è¦æå ¥çè®°å½æ°æ®tuple(tuple)/list[list]
@return: count åå½±åçè¡æ°
"""
count = self._cursor.executemany(sql,values)
return count
def __getInsertId(self):
"""
è·åå½åè¿æ¥æå䏿¬¡æå ¥æä½çæçid,å¦ææ²¡æå为ï¼
"""
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 update(self,sql,param=None):
"""
@summary: æ´æ°æ°æ®è¡¨è®°å½
@param sql: ï¼³ï¼±ï¼¬æ ¼å¼åæ¡ä»¶ï¼ä½¿ç¨(%s,%s)
@param param: è¦æ´æ°ç å¼ tuple/list
@return: count åå½±åçè¡æ°
"""
return self.__query(sql,param)
def delete(self,sql,param=None):
"""
@summary: å 餿°æ®è¡¨è®°å½
@param sql: ï¼³ï¼±ï¼¬æ ¼å¼åæ¡ä»¶ï¼ä½¿ç¨(%s,%s)
@param param: è¦å é¤çæ¡ä»¶ å¼ tuple/list
@return: count åå½±åçè¡æ°
"""
return self.__query(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()
é ç½®æä»¶æ¨¡åCnofig,å æ¬æ°æ®åºçè¿æ¥ä¿¡æ¯/ç¨æ·åå¯ç çï¼
#coding:utf-8
'''
Created on 2016å¹´5æ7æ¥
@author: baocheng
'''
DBHOST = "localhost"
DBPORT = 33606
DBUSER = "zbc"
DBPWD = "123456"
DBNAME = "test"
DBCHAR = "utf8"å建test模åï¼æµè¯ä¸ä¸ä½¿ç¨è¿æ¥æ± è¿è¡mysql访é®ï¼
#coding:utf-8
'''
@author: baocheng
'''
from MySqlConn import Mysql
from _sqlite3 import Row
#ç³è¯·èµæº
mysql = Mysql()
sqlAll = "SELECT tb.uid as uid, group_concat(tb.goodsname) as goodsname FROM ( SELECT goods.uid AS uid, IF ( ISNULL(goodsrelation.goodsname), goods.goodsID, goodsrelation.goodsname ) AS goodsname FROM goods LEFT JOIN goodsrelation ON goods.goodsID = goodsrelation.goodsId ) tb GROUP BY tb.uid"
result = mysql.getAll(sqlAll)
if result :
print "get all"
for row in result :
print "%s\t%s"%(row["uid"],row["goodsname"])
sqlAll = "SELECT tb.uid as uid, group_concat(tb.goodsname) as goodsname FROM ( SELECT goods.uid AS uid, IF ( ISNULL(goodsrelation.goodsname), goods.goodsID, goodsrelation.goodsname ) AS goodsname FROM goods LEFT JOIN goodsrelation ON goods.goodsID = goodsrelation.goodsId ) tb GROUP BY tb.uid"
result = mysql.getMany(sqlAll,2)
if result :
print "get many"
for row in result :
print "%s\t%s"%(row["uid"],row["goodsname"])
result = mysql.getOne(sqlAll)
print "get one"
print "%s\t%s"%(result["uid"],result["goodsname"])
#éæ¾èµæº
mysql.dispose()
å½ç¶ï¼è¿æå¾å¤å ¶ä»åæ°å¯ä»¥é ç½®ï¼
dbapi ï¼æ°æ®åºæ¥å£
mincached ï¼å¯å¨æ¶å¼å¯çç©ºè¿æ¥æ°é
maxcached ï¼è¿æ¥æ± æå¤§å¯ç¨è¿æ¥æ°é
maxshared ï¼è¿æ¥æ± æå¤§å¯å ±äº«è¿æ¥æ°é
maxconnections ï¼æå¤§å è®¸è¿æ¥æ°é
blocking ï¼è¾¾å°æå¤§æ°éæ¶æ¯å¦é»å¡
maxusage ï¼åä¸ªè¿æ¥æå¤§å¤ç¨æ¬¡æ°
æ ¹æ®èªå·±çéè¦åçé ç½®ä¸è¿°çèµæºåæ°ï¼ä»¥æ»¡è¶³èªå·±çå®é éè¦ã
è³æ¤ï¼pythonä¸çmysqlè¿æ¥æ± å®ç°å®äºï¼ä¸æ¬¡å°±ç´æ¥æ¿æ¥ç¨å°±å¥½äºã
å客å°åï¼data mining club