共計 2914 個字符,預計需要花費 8 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
丸趣 TV 小編給大家分享一下怎樣給 Python 的 MySQL 模塊加功能,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
使用 Python 操作 MySQL 數據庫的時候常使用 MySQLdb 這個模塊。在開發的過程發現 MySQLdb.connect 有些參數沒法設置。通過這個頁面我們看到的是在 connect 的時候,可以設置的 option 和 client_flags 和 MySQLcapi 相比差不少。下面丸趣 TV 丸趣 TV 小編來講解下如何給 Python 的 MySQL 模塊加功能?
如何給 Python 的 MySQL 模塊加功能
一個很重要的參數 MYSQL_OPT_READ_TIMEOUT 沒法設置,這個參數如果不設置,極致狀況 MySQL 處于 hang 住,自動切換 IP 漂移,客戶端無法重連到新 MySQL。
給 MySQLdb 加 Option 很簡單,只要修改_mysql.c 這個把 Python 對象映射到 MySQL 操作的文件,添加參數,再加一段 mysql_option 即可。
下面是修改后的 gitdiff 文件
diff--gita/_mysql.cb/_mysql.cindexd42cc54..61a9b34100644---a/_mysql.c+++b/_mysql.c@@-489,9+489,10@@_mysql_ConnectionObject_Initialize(named_pipe , init_command , read_default_file , read_default_group , client_flag , ssl ,- local_infile ,+ local_infile , read_timeout ,NULL};intconnect_timeout=0;+intread_timeout=0;intcompress=-1,named_pipe=-1,local_infile=-1;char*init_command=NULL,*read_default_file=NULL,@@-500,7+501,7@@_mysql_ConnectionObject_Initialize(self- converter=NULL;self- open=0;check_server_init(-1);-if(!PyArg_ParseTupleAndKeywords(args,kwargs, |ssssisOiiisssiOi:connect ,+if(!PyArg_ParseTupleAndKeywords(args,kwargs, |ssssisOiiisssiOii:connect ,kwlist, host, user, passwd, db, port, unix_socket, conv,@@-509,7+510,8@@_mysql_ConnectionObject_Initialize( init_command, read_default_file, read_default_group, client_flag, ssl,- local_infile/*DONOTPATCHFORRECONNECT,IDIOTS+ local_infile, read_timeout+/*DONOTPATCHFORRECONNECT,IDIOTSIFYOUDOTHIS,IWILLNOTSUPPORTYOURPACKAGES.*/))return-1;@@-540,6+542,12@@_mysql_ConnectionObject_Initialize(mysql_options( (self- connection),MYSQL_OPT_CONNECT_TIMEOUT,(char*) timeout);}++if(read_timeout){+unsignedinttimeout=read_timeout;+mysql_options( (self- connection),MYSQL_OPT_READ_TIMEOUT,(char*) timeout);+}+if(compress!=-1){mysql_options( (self- connection),MYSQL_OPT_COMPRESS,0);client_flag|=CLIENT_COMPRESS;
代碼修改完畢,pythonsetup.pyinstall 即可,如果出現 mysql_config 找不到的問題。你還要修改 setup_posix.py 文件。
hoterran@hoterran-laptop:~/Projects/MySQL-python-1.2.3$gitdiffsetup_posix.pydiff--gita/setup_posix.pyb/setup_posix.pyindex86432f5..f4f08f1100644---a/setup_posix.py+++b/setup_posix.py@@-23,7+23,7@@defmysql_config(what):ifret/256 1:raiseEnvironmentError(%snotfound %(mysql_config.path,))returndata-mysql_config.path= mysql_config +mysql_config.path= /usr/local/mysql/bin/mysql_config defget_config():importos,sys
如何給 Python 的 MySQL 模塊加功能
編譯通過,我們來試試添加的 read_timeout 這個參數。
conn=MySQLdb.connect(host=DB_SERVER,user=DB_USERNAME,passwd=DB_PASSWORD,db=DB_NAME,port=int(DB_PORT),client_flag=2,read_timeout=10)
然后執行語句前,你試著把 mysql 用 gdbhang 住 10s 后,python 就會異常拋錯
OperationalError:(2013, LostconnectiontoMySQLserverduringquery) /home/hoterran/Projects/dbaas/trunk/dbtest.py(18)() mydb.execute_sql(conn,sql)(Pdb)--Return-- /home/hoterran/Projects/dbaas/trunk/dbtest.py(18)()- None mydb.execute_sql(conn,sql)(Pdb)OperationalError:(2013, LostconnectiontoMySQLserverduringquery) (1)()- None
以上是“怎樣給 Python 的 MySQL 模塊加功能”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!
向 AI 問一下細節