安装
MySQLdb是Python语言访问mysql数据库的一个模块,如果你不确定自己的Python环境中是否已经安装了这个模块,可以打开Python shell,输入import MySQLdb,如果是返回错误,那就表明没有安装这个Python模块。下面就是在centos安装它的流程以及在安装过程中遇到的一些问题:
首先,在http://sourceforge.net/projects/mysql-python/ 这个网站上,我们可以下到这个类库
然后解压这个文件
tar xfz MySQL-python-1.2.4b4.tar.gz
cd MySQL-python-1.2.4b4
在site.cfg文件中,我们需要做一下简单的配置
mysql_config = /usr/bin/mysql_config
最后就是
python setup.py build
python setup.py install
安装中遇到的问题
第一点
_mysql.c:740: 警告:隐式声明函数 ‘mysql_debug’
_mysql.c: In function ‘_mysql_ConnectionObject_dump_debug_info’:
_mysql.c:758: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:760: 警告:隐式声明函数 ‘mysql_dump_debug_info’
_mysql.c:760: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘connection’ 的成员
_mysql.c: In function ‘_mysql_ConnectionObject_autocommit’:
_mysql.c:784: 警告:隐式声明函数 ‘mysql_query’
_mysql.c:784: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘connection’ 的成员
_mysql.c: In function ‘_mysql_ConnectionObject_commit’:
_mysql.c:807: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘connection’ 的成员
_mysql.c: In function ‘_mysql_ConnectionObject_rollback’:
_mysql.c:829: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘connection’ 的成员
_mysql.c: In function ‘_mysql_ConnectionObject_errno’:
_mysql.c:941: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:942: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘connection’ 的成员
_mysql.c: In function ‘_mysql_ConnectionObject_error’:
_mysql.c:957: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:958: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘connection’ 的成员
_mysql.c:958: 警告:传递参数 1 (属于 ‘PyString_FromString’)时将整数赋给指针,未作类型转换
_mysql.c: In function ‘_mysql_escape_string’:
_mysql.c:982: 警告:隐式声明函数 ‘mysql_escape_string’
_mysql.c: In function ‘_mysql_escape’:
_mysql.c:1089: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘converter’ 的成员
_mysql.c: In function ‘_mysql_ResultObject_describe’:
_mysql.c:1169: 错误:‘MYSQL_FIELD’ 未声明 (在此函数内第一次使用)
_mysql.c:1169: 错误:‘fields’ 未声明 (在此函数内第一次使用)
_mysql.c:1172: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:1173: 错误:‘_mysql_ResultObject’ 没有名为 ‘result’ 的成员
_mysql.c:1174: 错误:‘_mysql_ResultObject’ 没有名为 ‘result’ 的成员
_mysql.c:1185: 警告:隐式声明函数 ‘IS_NOT_NULL’
_mysql.c: In function ‘_mysql_ResultObject_field_flags’:
_mysql.c:1205: 错误:‘MYSQL_FIELD’ 未声明 (在此函数内第一次使用)
_mysql.c:1205: 错误:‘fields’ 未声明 (在此函数内第一次使用)
_mysql.c:1208: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:1209: 错误:‘_mysql_ResultObject’ 没有名为 ‘result’ 的成员
_mysql.c:1210: 错误:‘_mysql_ResultObject’ 没有名为 ‘result’ 的成员
_mysql.c: 在顶层:
_mysql.c:1251: 错误:expected declaration specifiers or ‘...’ before ‘MYSQL_ROW’
_mysql.c: In function ‘_mysql_row_to_tuple’:
_mysql.c:1257: 错误:‘_mysql_ResultObject’ 没有名为 ‘result’ 的成员
_mysql.c:1259: 警告:隐式声明函数 ‘mysql_fetch_lengths’
_mysql.c:1259: 错误:‘_mysql_ResultObject’ 没有名为 ‘result’ 的成员
_mysql.c:1259: 警告:赋值时将整数赋给指针,未作类型转换
_mysql.c:1262: 错误:‘_mysql_ResultObject’ 没有名为 ‘converter’ 的成员
_mysql.c:1263: 错误:‘row’ 未声明 (在此函数内第一次使用)
_mysql.c: 在顶层:
_mysql.c:1276: 错误:expected declaration specifiers or ‘...’ before ‘MYSQL_ROW’
_mysql.c: In function ‘_mysql_row_to_dict’:
_mysql.c:1281: 错误:‘MYSQL_FIELD’ 未声明 (在此函数内第一次使用)
_mysql.c:1281: 错误:‘fields’ 未声明 (在此函数内第一次使用)
_mysql.c:1283: 错误:‘_mysql_ResultObject’ 没有名为 ‘result’ 的成员
_mysql.c:1285: 错误:‘_mysql_ResultObject’ 没有名为 ‘result’ 的成员
_mysql.c:1285: 警告:赋值时将整数赋给指针,未作类型转换
_mysql.c:1286: 错误:‘_mysql_ResultObject’ 没有名为 ‘result’ 的成员
_mysql.c:1289: 错误:‘_mysql_ResultObject’ 没有名为 ‘converter’ 的成员
_mysql.c:1290: 错误:‘row’ 未声明 (在此函数内第一次使用)
_mysql.c: 在顶层:
_mysql.c:1315: 错误:expected declaration specifiers or ‘...’ before ‘MYSQL_ROW’
_mysql.c: In function ‘_mysql_row_to_dict_old’:
_mysql.c:1320: 错误:‘MYSQL_FIELD’ 未声明 (在此函数内第一次使用)
_mysql.c:1320: 错误:‘fields’ 未声明 (在此函数内第一次使用)
_mysql.c:1322: 错误:‘_mysql_ResultObject’ 没有名为 ‘result’ 的成员
_mysql.c:1324: 错误:‘_mysql_ResultObject’ 没有名为 ‘result’ 的成员
_mysql.c:1324: 警告:赋值时将整数赋给指针,未作类型转换
_mysql.c:1325: 错误:‘_mysql_ResultObject’ 没有名为 ‘result’ 的成员
_mysql.c:1328: 错误:‘_mysql_ResultObject’ 没有名为 ‘converter’ 的成员
_mysql.c:1329: 错误:‘row’ 未声明 (在此函数内第一次使用)
_mysql.c: 在顶层:
_mysql.c:1351: 错误:expected declaration specifiers or ‘...’ before ‘MYSQL_ROW’
_mysql.c: In function ‘_mysql__fetch_row’:
_mysql.c:1362: 错误:‘MYSQL_ROW’ 未声明 (在此函数内第一次使用)
_mysql.c:1362: 错误:expected ‘;’ before ‘row’
_mysql.c:1366: 错误:‘_mysql_ResultObject’ 没有名为 ‘use’ 的成员
_mysql.c:1367: 错误:‘row’ 未声明 (在此函数内第一次使用)
_mysql.c:1367: 警告:隐式声明函数 ‘mysql_fetch_row’
_mysql.c:1367: 错误:‘_mysql_ResultObject’ 没有名为 ‘result’ 的成员
_mysql.c:1370: 错误:‘_mysql_ResultObject’ 没有名为 ‘result’ 的成员
_mysql.c:1373: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘connection’ 的成员
_mysql.c:1381: 错误:提供给函数 ‘convert_row’ 的实参太多
_mysql.c: In function ‘_mysql_ResultObject_fetch_row’:
_mysql.c:1405: 错误:expected declaration specifiers or ‘...’ before ‘MYSQL_ROW’
_mysql.c:1420: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:1432: 错误:‘_mysql_ResultObject’ 没有名为 ‘use’ 的成员
_mysql.c:1446: 警告:隐式声明函数 ‘mysql_num_rows’
_mysql.c:1446: 错误:‘_mysql_ResultObject’ 没有名为 ‘result’ 的成员
_mysql.c: In function ‘_mysql_ConnectionObject_character_set_name’:
_mysql.c:1513: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c: In function ‘_mysql_get_client_info’:
_mysql.c:1604: 警告:隐式声明函数 ‘mysql_get_client_info’
_mysql.c:1604: 警告:传递参数 1 (属于 ‘PyString_FromString’)时将整数赋给指针,未作类型转换
_mysql.c: In function ‘_mysql_ConnectionObject_get_host_info’:
_mysql.c:1618: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:1619: 警告:隐式声明函数 ‘mysql_get_host_info’
_mysql.c:1619: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘connection’ 的成员
_mysql.c:1619: 警告:传递参数 1 (属于 ‘PyString_FromString’)时将整数赋给指针,未作类型转换
_mysql.c: In function ‘_mysql_ConnectionObject_get_proto_info’:
_mysql.c:1633: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:1634: 警告:隐式声明函数 ‘mysql_get_proto_info’
_mysql.c:1634: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘connection’ 的成员
_mysql.c: In function ‘_mysql_ConnectionObject_get_server_info’:
_mysql.c:1648: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:1649: 警告:隐式声明函数 ‘mysql_get_server_info’
_mysql.c:1649: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘connection’ 的成员
_mysql.c:1649: 警告:传递参数 1 (属于 ‘PyString_FromString’)时将整数赋给指针,未作类型转换
_mysql.c: In function ‘_mysql_ConnectionObject_info’:
_mysql.c:1665: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:1666: 警告:隐式声明函数 ‘mysql_info’
_mysql.c:1666: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘connection’ 的成员
_mysql.c:1666: 警告:赋值时将整数赋给指针,未作类型转换
_mysql.c: In function ‘_mysql_ConnectionObject_insert_id’:
_mysql.c:1698: 错误:‘my_ulonglong’ 未声明 (在此函数内第一次使用)
_mysql.c:1698: 错误:expected ‘;’ before ‘r’
_mysql.c:1700: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:1702: 错误:‘r’ 未声明 (在此函数内第一次使用)
_mysql.c:1702: 警告:隐式声明函数 ‘mysql_insert_id’
_mysql.c:1702: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘connection’ 的成员
_mysql.c: In function ‘_mysql_ConnectionObject_kill’:
_mysql.c:1719: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:1721: 警告:隐式声明函数 ‘mysql_kill’
_mysql.c:1721: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘connection’ 的成员
_mysql.c: In function ‘_mysql_ConnectionObject_field_count’:
_mysql.c:1740: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:1742: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘connection’ 的成员
_mysql.c: In function ‘_mysql_ResultObject_num_fields’:
_mysql.c:1757: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:1758: 错误:‘_mysql_ResultObject’ 没有名为 ‘result’ 的成员
_mysql.c: In function ‘_mysql_ResultObject_num_rows’:
_mysql.c:1773: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:1774: 错误:‘_mysql_ResultObject’ 没有名为 ‘result’ 的成员
_mysql.c: In function ‘_mysql_ConnectionObject_ping’:
_mysql.c:1803: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:1804: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘connection’ 的成员
_mysql.c:1806: 警告:隐式声明函数 ‘mysql_ping’
_mysql.c:1806: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘connection’ 的成员
_mysql.c: In function ‘_mysql_ConnectionObject_query’:
_mysql.c:1827: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:1829: 警告:隐式声明函数 ‘mysql_real_query’
_mysql.c:1829: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘connection’ 的成员
_mysql.c: In function ‘_mysql_ConnectionObject_select_db’:
_mysql.c:1857: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:1859: 警告:隐式声明函数 ‘mysql_select_db’
_mysql.c:1859: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘connection’ 的成员
_mysql.c: In function ‘_mysql_ConnectionObject_shutdown’:
_mysql.c:1878: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:1880: 警告:隐式声明函数 ‘mysql_shutdown’
_mysql.c:1880: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘connection’ 的成员
_mysql.c: In function ‘_mysql_ConnectionObject_stat’:
_mysql.c:1905: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:1907: 警告:隐式声明函数 ‘mysql_stat’
_mysql.c:1907: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘connection’ 的成员
_mysql.c:1907: 警告:赋值时将整数赋给指针,未作类型转换
_mysql.c: In function ‘_mysql_ConnectionObject_store_result’:
_mysql.c:1928: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:1929: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘converter’ 的成员
_mysql.c:1938: 错误:‘_mysql_ResultObject’ 没有名为 ‘result’ 的成员
_mysql.c: In function ‘_mysql_ConnectionObject_thread_id’:
_mysql.c:1967: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:1969: 警告:隐式声明函数 ‘mysql_thread_id’
_mysql.c:1969: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘connection’ 的成员
_mysql.c: In function ‘_mysql_ConnectionObject_use_result’:
_mysql.c:1989: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:1990: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘converter’ 的成员
_mysql.c:1999: 错误:‘_mysql_ResultObject’ 没有名为 ‘result’ 的成员
_mysql.c: In function ‘_mysql_ConnectionObject_dealloc’:
_mysql.c:2017: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c: In function ‘_mysql_ConnectionObject_repr’:
_mysql.c:2029: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:2030: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘connection’ 的成员
_mysql.c: In function ‘_mysql_ResultObject_data_seek’:
_mysql.c:2048: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:2049: 警告:隐式声明函数 ‘mysql_data_seek’
_mysql.c:2049: 错误:‘_mysql_ResultObject’ 没有名为 ‘result’ 的成员
_mysql.c: In function ‘_mysql_ResultObject_row_seek’:
_mysql.c:2062: 错误:‘MYSQL_ROW_OFFSET’ 未声明 (在此函数内第一次使用)
_mysql.c:2062: 错误:expected ‘;’ before ‘r’
_mysql.c:2064: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:2065: 错误:‘_mysql_ResultObject’ 没有名为 ‘use’ 的成员
_mysql.c:2070: 错误:‘r’ 未声明 (在此函数内第一次使用)
_mysql.c:2070: 警告:隐式声明函数 ‘mysql_row_tell’
_mysql.c:2070: 错误:‘_mysql_ResultObject’ 没有名为 ‘result’ 的成员
_mysql.c:2071: 警告:隐式声明函数 ‘mysql_row_seek’
_mysql.c:2071: 错误:‘_mysql_ResultObject’ 没有名为 ‘result’ 的成员
_mysql.c: In function ‘_mysql_ResultObject_row_tell’:
_mysql.c:2083: 错误:‘MYSQL_ROW_OFFSET’ 未声明 (在此函数内第一次使用)
_mysql.c:2083: 错误:expected ‘;’ before ‘r’
_mysql.c:2085: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:2086: 错误:‘_mysql_ResultObject’ 没有名为 ‘use’ 的成员
_mysql.c:2091: 错误:‘r’ 未声明 (在此函数内第一次使用)
_mysql.c:2091: 错误:‘_mysql_ResultObject’ 没有名为 ‘result’ 的成员
_mysql.c:2092: 错误:‘_mysql_ResultObject’ 没有名为 ‘result’ 的成员
_mysql.c: In function ‘_mysql_ResultObject_dealloc’:
_mysql.c:2100: 警告:隐式声明函数 ‘mysql_free_result’
_mysql.c:2100: 错误:‘_mysql_ResultObject’ 没有名为 ‘result’ 的成员
_mysql.c: 在顶层:
_mysql.c:2331: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
_mysql.c:2338: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘converter’ 的成员
_mysql.c:2345: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘connection’ 的成员
_mysql.c:2352: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘connection’ 的成员
_mysql.c:2359: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘connection’ 的成员
_mysql.c:2422: 错误:‘_mysql_ResultObject’ 没有名为 ‘converter’ 的成员
_mysql.c:2422: 错误:初始值设定元素不是常量
_mysql.c:2422: 错误:(在 ‘_mysql_ResultObject_memberlist[0].offset’ 的初始化附近)
_mysql.c: In function ‘_mysql_ConnectionObject_getattr’:
_mysql.c:2444: 错误:‘_mysql_ConnectionObject’ 没有名为 ‘open’ 的成员
error: command 'gcc' failed with exit status 1
解决办法就是安装mysql-devel依赖包:
yum install mysql-devel
第二点
running build
running build_py
copying MySQLdb/release.py -> build/lib.linux-i686-2.4/MySQLdb
running build_ext
building '_mysql' extension
gcc -pthread -fno-strict-aliasing -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-siz e=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -D_GNU_SOURCE -fPIC -fPIC -Dversion_info=(1,2,4,'beta',4) -D__version__=1. 2.4b4 -I/usr/local/mysql/include/mysql -I/usr/include/python2.4 -c _mysql.c -o build/temp.linux-i686-2.4/_mysql.o -g -DUNIV_LINUX
_mysql.c: In function ‘_mysql_ConnectionObject_Initialize’:
_mysql.c:602: error: expected expression before ‘)’ token
error: command 'gcc' failed with exit status 1
这里是源码有些问题:在_mysql.c 602行附近,找到下边的代码:
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
#ifdef HAVE_MYSQL_OPT_READ_TIMEOUT
"|ssssisOiiisssiOii:connect",
#else
"|ssssisOiiisssiOi:connect",
#endif
kwlist,
&host, &user, &passwd, &db,
&port, &unix_socket, &conv,
&connect_timeout,
&compress, &named_pipe,
&init_command, &read_default_file,
&read_default_group,
&client_flag, &ssl,
&local_infile,
#ifdef HAVE_MYSQL_OPT_READ_TIMEOUT
&read_timeout
#endif
))
return -1;
改为
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
#ifdef HAVE_MYSQL_OPT_READ_TIMEOUT
"|ssssisOiiisssiOii:connect",
#else
"|ssssisOiiisssiOi:connect",
#endif
kwlist,
&host, &user, &passwd, &db,
&port, &unix_socket, &conv,
&connect_timeout,
&compress, &named_pipe,
&init_command, &read_default_file,
&read_default_group,
&client_flag, &ssl,
&local_infile
#ifdef HAVE_MYSQL_OPT_READ_TIMEOUT
, &read_timeout
#endif
))
return -1;
然后再执行
python setup.py build
python setup.py install
如果还是有问题,可以参考install文件,里面有在安装MySQLdb时一些需要注意的事项。
参考链接
[1] http://bbs.chinaunix.net/thread-3574499-1-1.html
[2]http://cooler1217.iteye.com/blog/1497472
[3]http://www.phpv5.com/blog/mysqlpython-setup-error
[4]http://www.cnblogs.com/czh-liyu/archive/2008/04/13/1151758.html