ä¸ãä¸è çå¼å
1.1 ç®åä»ç»
1. MySQLdbåmysqlclient çåºå«ï¼
MySQLdbåªæ¯æpython 2.x çæ¬ï¼mysqlclient æ¯MySQLdbçä¸ä¸ªåæ¯ï¼è§£å³äºpython 3.x çå ¼å®¹é®é¢ã
2. mysqlclient
1ï¼æ¯ä¸ä¸ªCæ©å±æ¨¡å,ç¼è¯å®è£ å¯è½ä¼å¯¼è´æ¥åç§é误,ææ¾æ²¡æpymysqlæ¹ä¾¿
2ï¼é度快ï¼
3. pymysql
1ï¼çº¯Pythonå®ç°çï¼å®è£ ç®åï¼ç´æ¥pipå®è£ ï¼
2) ç±äºçº¯Pythonå®ç°çï¼å¯ä»¥å¾å¥½çè·geventæ¡æ¶ç»å
1.2 å¼åç¹åéæ©
pymysql å mysqlclient ç®åæ¯pythonè¿æ¥mysql ç主æµæ¹å¼ã
åï¼ä¸¤ä¸ªåºçä½è æ¯åä¸ä¸ªäººINADA Naokiï¼pipåºé®ç®±é½æåmailto:[email protected]
å¼ï¼mysqlclient é度æ¯pymysql æ´å¿«ï¼pymysqlæ´å ç®åæ使ç¨ã
ä¸è¬è¦éæ© mysqlclientï¼é¤é以ä¸ä¸ç§æ åµï¼
1ï¼ä½ ä¸è½ç¨libmysqlclientåºäºæç§åå
2ï¼ä½ æ³ä½¿ç¨gevent or eventlet é å
3) èèmysqlåè®®å ¼å®¹æ§
åææ¯è¿æ ·çï¼
mysqlclient-python is much faster than PyMySQL.
When to use PyMySQL is:
You can't use libmysqlclient for some reason
You want to use monkeypatched socket of gevent or eventlet
You wan't to hack mysql protocol
ä¸é¢çåå ï¼å¯¼è´ç®å使ç¨pymysqlçç¨åºåè¿è¶ è¿mysqlclientï¼ç¹å«æ¯ç¬¬äºæ¡ï¼ç°å¨çpythonç«ç¹ï¼åºæ¬é½è¦ç¨geventæè eventletå§ã
ç®åpymysqlåmysqlclientçå项ææ 对æ¯ï¼
https://python.libhunt.com/compare-mysqlclient-python-vs-pymysql
ç®åï¼ï¼å¤§å¤ç¨åºç¿éæ©äºç®åæç¨ä½æ¯æ§è½è¾å·®çpymysqlãpymysqlæ¯mysqlclientæ ¢è®¸å¤ï¼å¦ææ¯å¤§é¡¹ç®pymysql çå¼±å¿ä¼è¢«æ¾å¤§ã建议è¿æ¯ä½¿ç¨é度è¾å¿«çmysqlclient ã
äºãå®è£ åº
2.1 å®è£ mysqlclient
å ³äºmysqlclient çå®è£ ï¼å¯ä»¥å è¯è¯ä»¥ä¸å½ä»¤è¿è¡å®è£ ï¼
pip install mysqlclient
å¦æä¸ç´å®è£ 失败ï¼è¯è¯éè¿èªå·±ä¸è½½mysqlclient çwheelæ件ï¼
https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient
mysqlclient-1.4.6 æ¯çæ¬å·
cp36ãcp37æ¯pythonççæ¬
win32ãwin_amd64æ¯windowsçæ¬
ä¸è½½å®ï¼æå¼cmdï¼win+Rï¼è¾å ¥cmdï¼å车ï¼åæ¢å°å¯¹åºçè·¯å¾ï¼
- windowsç³»ç»
å¦ææ¯Cçï¼ç´æ¥ç¨ä»¥ä¸å½ä»¤ï¼
cd [æ件路å¾]
å¨å ¶ä»çï¼éè¦å¤ä¸æ¥åæ¢ç符ï¼å设æ¯Dçï¼å¨cmdå è¾å ¥d: ï¼å车ï¼åæ¢å°Dçä¹ååç¨ãcd [æ件路å¾]ãï¼æ³¨æï¼cdåè·¯å¾é´æä¸ä¸ªç©ºæ ¼ã
- Macç³»ç»åªæä¸ä¸ªçç´æ¥ä½¿ç¨ä»¥ä¸è·¯å¾å³å¯ã
cd [æ件路å¾]
æä¸ä¸ªç®åçè·¯å¾è·åæ¹æ³ï¼æè·¯å¾æå°cmdæç»ç«¯å³å¯æ¥çã
åæ¢æåä¹åï¼è¿å ¥ä¸ä¸æ¥ï¼å®è£ æ件ï¼
pip install mysqlclient-1.4.6-cp36-cp36m-win_amd64.whl
å®è£ å®æ件ï¼æåä¸æ¥ï¼å®è£ 模åï¼Mac使ç¨pip3ï¼ï¼
pip install mysqlclient
å½ç¶ï¼ä¹å¯ä»¥ç´æ¥å»å®æ¹ç½ç«ä¸è½½å缩å ã
å®æ¹é¾æ¥ï¼https://pypi.org/project/mysqlclient/#files
éæ©å¯¹åºççæ¬ä¸è½½~ï¼å¥½å没ææå®Macçï¼ç´æ¥ä¸è½½æåä¸ä¸ªæºå ï¼
2.2 å®è£ pymysql
æå¼cmdï¼æç»ç«¯ ç´æ¥pip install pymysql å³å¯ï¼å¦æå®è£ ä¸äºï¼å°å®æ¹ä¸è½½åºè¿è¡å®è£ ï¼
pymysqlå®æ¹ä¸è½½é¾æ¥ï¼https://pypi.org/project/PyMySQL/#files
ä¸ãæµè¯ï¼_gevent_waiter
å ¶å®ï¼
强大çmysqlclientå·²ç»è§£å³äºï¼mysqlclientç®åä¹æ¯å¯ä»¥ä½¿ç¨geventäºãç´æ¥ä¸ä»£ç ï¼
import MySQLdb
import gevent.hub
def _gevent_waiter(fd, hub=gevent.hub.get_hub()):
hub.wait(hub.loop.io(fd, 1))
conn = MySQLdb.connect(
db=self.db,
host=self.host if not self.ssh else LOOPBACK_ADDRESS,
port=self.port if not self.ssh else int(self.ssh.local_bind_port),
user=self.user,
password=self.passwd,
charset=self.charset,
connect_timeout=self.connect_timeout,
cursorclass=DictCursor,
use_unicode=True,
waiter=_gevent_waiter,
ä¸é¢çè¿æ¥æ¹å¼ï¼å ¶ä»åæ°ä¸å¤è§£éäºï¼å°±è¯´waiterå§ï¼æäºè¿ä¸ªç¸å½äºmysqlclinetå¯ä»¥å®ç¾é ågeventäºã
ä¸äºè§£é£ä¸ª_gevent_waiterï¼å¯ä»¥ççè¿ç¯æç« gevent hub ã
é£ä¹ï¼æ们æä¹æµè¯å¢ï¼æµè¯è¿ç¨æ¯è¾ç®åï¼èµ·ä¸ä¸ªåè¿ç¨ç webæå¡ï¼è¿æ¥æ°æ®åºçæ¶åæ¥è¯¢çæ¶åï¼å¨æ°æ®åºæ§è¡time.sleep 20ç§ï¼è¿ä¸ªæ¶åçå ¶ä»è¯·æ±è¿ä¸ª webæå¡è¿è½å¤ç请æ±ä¸ï¼ç¨äºwaiter=_gevent_waiterå®ç¾åããã
æäºè¿ä¸ªï¼ä¸ä¸ªæ¥æ大éæ°æ®åºæ¥è¯¢æå¡çç³»ç»ï¼æå¯è½åä¹ä¸ä¼ç¨tornadoäºãã