将MySQL 3.23与pyodbc 3.07连接

时间:2017-11-17 12:10:50

标签: mysql mariadb pyodbc unixodbc

我正在尝试使用UnixODBC和pyodbc 3.07从Ubuntu 16客户端连接到旧的MySQL 3.23服务器。我已经尝试过三个(3)版本的MySQL Connector / ODBC和两个(2)来自MariaDB:

MySQL-ODBC 5.3.9 仅支持新的mysql身份验证方法。因此它无法连接。

MySQL-ODBC 5.1.13 有一个用于身份验证方法的开关,但在pyodbc.connect(dsn)上告诉我:[MySQL][ODBC 5.1 Driver]Driver does not support server versions under 4.1.1

MySQL-ODBC 3.51 有两个问题:

  1. [MySQL][ODBC 3.51 Driver]Transactions are not enabled (4000) (SQLSetConnnectAttr(SQL_ATTR_AUTOCOMMIT))失败,因为pyodbc默认将autocommit设置为false。
  2. 连接pyodbc.connect(dsn, autocommit=True)时给我一个连接。连接给了我一个游标,但所有cursor.execute(sql)抛出异常('HY000', 'The driver did not supply an error!')
  3. 通过isql -v [dsn]从shell测试与shell的连接给我一个会话但是对[ISQL]ERROR: Could not SQLExecute的所有语句都失败了。所以这似乎是一个unixodbc问题。

    我安装了 mysql-client 。但是programm mysql无法连接服务器。

    mariadb-client 可以连接到数据库甚至执行语句。这看起来更有希望。

    我下载了 MariaDB ODBC-Driver 3.0.2 。将该驱动程序与isql一起使用会返回错误:[S1000][unixODBC][ma-3.0.2]Plugin old_password could not be loaded: lib/mariadb/plugin/old_password.so: cannot open shared object file: No such file or directory。这是一个可以使用的响应。有一个ODBC-Option PLUGIN_DIR,但我不知道从哪里获取插件。

    MariaDB ODBC-Driver 2.0.13 在连接时提供('HY000', "[HY000] [unixODBC][ma-2.0.13]You have an error in your SQL syntax near 'SQL_AUTO_IS_NULL=0' at line 1 (1064) (SQLDriverConnect)")。因为似乎没有办法改变这一点。在这里干掉。

    我想知道是否有办法通过unixodbc / pyodbc访问这个旧的MySql?

    或者有人知道在哪里可以获得MariaDB的插件old_password.so吗?

    通过apt-get安装的mariadb-client可以连接,所以必须有办法。

1 个答案:

答案 0 :(得分:2)

正如Zac B所示,没有真正的方法可以将来自Ubuntu 16客户端的MySQL 3.23服务器与UnixODBC和pyodbc 3.07连接起来。

FlipperPA建议使用pypi.python.org/pypi/MySQL-python/1.2.4作为下一个解决方案。所以我试了一下:

通过 apt 安装的

MySQL-python 无法连接到那个旧的MySQL。它使用的系统mysql-client libs不能与MySQL 3.23一起使用。

通过 pip 安装

MySQL-python 是另一回事:它从 libmysqlclient-dev <中包含来自 mysql_config 的库/ strong>包。也不适用于MySQL 3.23。但是有机会在这里修改一些东西。

当我安装 libmariadb-client-lgpl-dev 时,我得到一个 mariadb_config ,它看起来很像mysql_config。 Ubuntu 16的mariadb-client使用MySQL 3.23(如上所示)。

ln -s /usr/bin/mariadb_config mysql_config
pip install MySQL-python

这可以胜任。我可以从Python连接那个旧的MySQL服务器。

数据类型存在一些问题,但在这种情况下我并不挑剔。