mysql-python1.2.3可以连接MySQL5.5
环境:Windowsxp python2.6 mysql5.1(之前安装的,没有删除) mingw32
这个没什么好说的,记得安装的时候把开发人员所需的内容选上(或者完全安装)。
我的mysql5.1还跑在3306端口,所以5.5就设在3307端口。
服务的名字也不能用“mysql”,因为5.1占了,所以我设成mysql5.5
安装1.2.2的时候使用的是Windows exe格式的安装包,没有费什么劲,没有想到这个1.2.3的源码包装起来这么费劲。
问题主要出在setup_windows.py这个安装脚本里。
首先,里面通过注册表获取mysql_root的语句会报错。我对python的_winreg包也不太了解,所以没有改,注释掉后,直接从注册表里将mysql的location值赋值给了mysql_root:
# serverKey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, options['registry_key'])
# mysql_root, dummy = _winreg.QueryValueEx(serverKey,'Location')
mysql_root = 'D:\Program Files\MySQL\MySQL Server 5.5'
然后,安装选项也有问题,这一句:
libraries = [ 'kernel32', 'advapi32', 'wsock32', client ]
会导致非常壮观非常长的错误日志。问题主要出在最后的client上,把client改为'libmysql'就可以了:
# libraries = [ 'kernel32', 'advapi32', 'wsock32', client ]
libraries = [ 'kernel32', 'advapi32', 'wsock32', 'libmysql']
中间还可能会出现缺少某某.h文件的错误,主要的是在mysql的安装过程中没有安装developer comments(貌似是这)的缘故。
可以参考这个博客:
http://daniel-zhy.livejournal.com/31420.html
需要注意的是,正如我在博客下面留言的:不应该是'mysql',而是'libmysql'。
In [34]: cur1.execute('show tables;') Out[34]: 2L In [35]: cur1.fetchall() Out[35]: (('dict',), ('test5.5',)) In [36]: cur1.execute('desc dict;') Out[36]: 2L In [37]: cur1.fetchall() Out[37]: (('key', 'tinyint(4)', 'NO', 'PRI', '0', ''), ('value', 'varchar(20)', 'YES', '', None, ''))