我正在尝试使用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 有两个问题:
[MySQL][ODBC 3.51 Driver]Transactions are not enabled (4000) (SQLSetConnnectAttr(SQL_ATTR_AUTOCOMMIT))
失败,因为pyodbc默认将autocommit设置为false。pyodbc.connect(dsn, autocommit=True)
时给我一个连接。连接给了我一个游标,但所有cursor.execute(sql)抛出异常('HY000', 'The driver did not supply an error!')
。通过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可以连接,所以必须有办法。
答案 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服务器。
数据类型存在一些问题,但在这种情况下我并不挑剔。