您好,登錄后才能下訂單哦!
小編給大家分享一下怎樣給Python的MySQL模塊加功能,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
使用Python操作MySQL數(shù)據(jù)庫的時(shí)候常使用MySQLdb這個(gè)模塊。在開發(fā)的過程發(fā)現(xiàn)MySQLdb.connect有些參數(shù)沒法設(shè)置。通過這個(gè)頁面我們看到的是在connect的時(shí)候,可以設(shè)置的option和client_flags和MySQLcapi相比差不少。下面億速云小編來講解下如何給Python的MySQL模塊加功能?
如何給Python的MySQL模塊加功能
一個(gè)很重要的參數(shù)MYSQL_OPT_READ_TIMEOUT沒法設(shè)置,這個(gè)參數(shù)如果不設(shè)置,極致狀況MySQL處于hang住,自動(dòng)切換IP漂移,客戶端無法重連到新MySQL。
給MySQLdb加Option很簡單,只要修改_mysql.c這個(gè)把Python對(duì)象映射到MySQL操作的文件,添加參數(shù),再加一段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即可,如果出現(xiàn)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這個(gè)參數(shù)。
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)
然后執(zhí)行語句前,你試著把mysql用gdbhang住10s后,python就會(huì)異常拋錯(cuò)
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模塊加功能”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。