The header file mysql.h has changed the definition of mysql_fetch_field_direct between 3.22.25 and 3.22.27. MySQLmodule.c as written upstream assumes 3.22.25 style definition. Here is a quick patch. --- MySQLmodule.c 1999/10/20 05:25:09 1.4 +++ MySQLmodule.c 1999/10/20 05:33:24 @@ -158,6 +158,11 @@ #include "Python.h" #include "mysql.h" +#if MYSQL_VERSION_ID > 32225 +#define Mysql_fetch_field_direct(a,b) mysql_fetch_field_direct(a,b) +#else +#define Mysql_fetch_field_direct(a,b) &(mysql_fetch_field_direct(a,b)) +#endif static char MySQL_Version[] = "MySQLmodule-1.4: A Python interface to the MySQL database."; @@ -232,7 +237,7 @@ PyObject *rowlist, *fieldobj; MYSQL_FIELD *tf; int i, n; - unsigned int *lengths; + unsigned long *lengths; n = mysql_num_fields(res); lengths = mysql_fetch_lengths(res); @@ -381,7 +386,7 @@ if (reslist == NULL) return NULL; n = mysql_num_fields(res); for (i = 0; i < n; i++) { - tf = &(mysql_fetch_field_direct(res, i)); + tf = Mysql_fetch_field_direct(res, i); if (tf == NULL) { if (res->handle && mysql_error(res->handle)[0] != 0) { PyErr_SetString(MySQLError,mysql_error(res->handle)); @@ -1122,7 +1127,7 @@ if (rows > 0) { cols = mysql_num_fields(self->res); for (j=0; j<cols; j++) { - tf = &(mysql_fetch_field_direct(self->res,j)); + tf = Mysql_fetch_field_direct(self->res,j); if (tf == NULL) { if (self->res->handle && mysql_error(self->res->handle)[0] != 0) { PyErr_SetString(MySQLError,mysql_error(self->res->handle)); @@ -1144,7 +1149,7 @@ rowlist = PyList_GetItem(datalist,i); if (rowlist == NULL) goto error; for (j=0; j<cols; j++) { - tf = &(mysql_fetch_field_direct(self->res,j)); + tf = Mysql_fetch_field_direct(self->res,j); if (tf == NULL) { if (self->res->handle && mysql_error(self->res->handle)[0] != 0) { PyErr_SetString(MySQLError,mysql_error(self->res->handle));