使用MySQLdb模块与Pypy编译器搭配

6
我正在尝试使用Pypy编译器来加速我的代码。然而,我在MySQLdb模块上遇到了麻烦,因为Pypy无法找到它。
我已经阅读过MySQLdb 1.2.4应该可以与Pypy良好地配合使用,所以我升级了该模块,并测试了它是正确版本的CPython编译器。
import MySQLdb
MySQLdb.__version__
>> '1.2.4'

但是使用Pypy时,我会得到以下信息:
Python 2.7.2 (1.9+dfsg-1, Jun 19 2012, 23:23:45)
[PyPy 1.9.0 with GCC 4.7.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
And now for something completely different: ``-FIRST they ignore you, then they
laugh at you, then they fight you, then you win.-''
>>>> import MySQLdb
Traceback (most recent call last):
  File "<console>", line 1, in <module>
ImportError: No module named MySQLdb

需要帮助吗?我正在使用运行在Ubuntu 13.04上的Pypy,该软件已经包含在Canonical仓库中。


请参见http://stackoverflow.com/questions/17187959/different-sys-path-between-pypy-and-normal-python。 - Armin Rigo
1个回答

13

MySQLdb主要是用C编写的,pypy无法直接使用它。您需要打补丁并重新编译

更简单的解决方案是使用纯Python MySQL连接器库,如pymysqlmysql-connector-python

pymysql甚至可以用作MySQLdb的替代品,您只需要添加以下内容:

import pymysql
pymysql.install_as_MySQLdb()
或者将此放入模块MySQLdb.py中,之后导入MySQLdb的代码应该正常工作。

pymysql 比 MySQLdb 慢很多吗?没有使用 pypy 我的处理时间是两倍 - Roman Rdgz
它在pypy上的表现应该比在cpython上要好,但我还没有进行任何基准测试。通常瓶颈都是数据库性能。 - mata
1
好的,我已经对一个测试表进行了一些非常简单的插入、查询和删除测试。cpython2.7.4+MySQLdb:50个循环,3次中最佳:每个循环80毫秒,pypy1.9.0+pymysql:50个循环,3次中最佳:每个循环89.7毫秒 - 因此对于这个测试用例,pypy+pymysql要慢大约12% - 但结果可能不真正代表更复杂的用例。 - mata
是的,如果没有使用pypy,pymysql会非常慢。我正在使用oursql,并尝试转换为pymysql以实现pypy兼容性,但现在处理速度太慢了。 - radtek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接