怎样给Python的MySQL模块加功能

54次阅读
没有评论

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

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-04发表,共计2914字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)