如何在铁蟒蛇上安装和使用sqlobject + mysql?

时间:2012-08-03 20:58:11

标签: mysql ironpython sqlobject

是否可以使用sqlobject从iron python连接到mysql数据库?如果是这样,怎么样?我必须安装什么?

我为cpython安装了sqlobject,它工作正常,但如果我在ironpython中使用相同的包,我会得到“ImportError:没有名为_mysql的模块”。我理解这意味着ironpython无法加载访问mysql API所必需的基于C的.dll。什么是变通方法,还是有一个?

4 个答案:

答案 0 :(得分:1)

查看源代码sqlobject是纯python,代码依赖于MySQLdb,它仅限于cpython。

但是如果修改代码以使用用纯python编写的mysql.connector(http://dev.mysql.com/doc/connector-python/en/index.html)库,那么你应该能够建立与mysql的连接

注意:mysql.connector不遵循与MySQLdb相同的api,并且需要对source code进行大量重写

我相信这可能是您最好的解决方法

答案 1 :(得分:-1)

你必须在python中安装'_mysql'模块。我不知道你使用的是哪个版本的python。

以下是为python 2.x或python 3.x安装'_mysql'模块的一些链接

http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python

http://www.technicalbard.com/files/MySQL-python-1.2.2.win32-py2.6.exe

http://www.codegood.com/archives/129

答案 2 :(得分:-1)

如果你看到这个,那么你在安装MySQLdb时可能会出错;重读(或读取)自述文件。 _mysql是与MySQL客户端库连接的低级C模块。

过去,各种版本的MySQLdb都在“怪异”平台上构建了问题;在这种情况下,“怪异”意味着“不是Linux”,但通常在Unix / POSIX平台上没有问题,包括BSD和Mac OS X.Windows一直存在问题,部分原因是Windows安装中没有mysql_config可用MySQL 1.2.1解决了大部分(如果不是全部)这些问题,但您仍然需要编辑配置文件,以便设置知道在哪里找到MySQL以及要包含哪些库。

ImportError: libmysqlclient_r.so.14: cannot open shared object file: No such file or directory

.so之后的数字可能会有所不同,但这意味着你有一个版本的MySQLdb针对一个版本的MySQL编译,现在正在尝试针对不同的版本运行它。共享库版本往往会在主要版本之间发生变化。

解决方案:重建MySQLdb,或获取匹配的MySQL版本。

可能导致此问题的另一件事:MySQL库可能不在您的系统路径上。

解决方案:

set the LD_LIBRARY_PATH environment variable so that it includes the path to the MySQL libraries.

set static=True in site.cfg for static linking

reconfigure your system so that the MySQL libraries are on the default loader path. In Linux, you edit /etc/ld.so.conf and run ldconfig. For Solaris, see Linker and Libraries Guide.

ImportError: ld.so.1: python: fatal: libmtmalloc.so.1: DF_1_NOOPEN tagged object may not be dlopen()'ed

这是来自Solaris的一个奇怪的。这是什么意思?我不知道。但是,如果Python和MySQL之间存在某种编译器或环境不匹配,就会发生这种情况。例如,在某些商业系统中,您可能会使用自己的编译器编译一些代码,并使用GCC编译其他内容。它们并不总是啮合在一起。遇到这种情况的一种方法是从不同的供应商处获取二进制包。

解决方案:从源代码重建Python或MySQL(或两者)。

ImportError: dlopen(./_mysql.so, 2): Symbol not found: _sprintf$LDBLStub Referenced from: ./_mysql.so Expected in: dynamic lookup

这是Mac OS X中的一个。它似乎是编译器不匹配,但这次是在两个不同版本的GCC之间。似乎GCC的几乎所有主要版本都会在某些原因中更改ABI,因此,例如,使用GCC-3.3和GCC-4.0编译链接代码可能会有问题。

答案 3 :(得分:-1)