共计 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 问一下细节