Django - MySQLdb: 找不到符号 _mysql_affected_rows

8 投票
6 回答
11240 浏览
提问于 2025-04-15 13:42

一位同事在用Django的时候,遇到了这个错误信息,想要使用MySQLdb:

[...]
ImproperlyConfigured("Error loading MySQLdb module: %s" % e) django.core.exceptions.ImproperlyConfigured: 
Error loading MySQLdb module: dlopen(/Users/roy/.python-eggs/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg-tmp/_mysql.so, 2): 
Symbol not found: _mysql_affected_rows 
Referenced from: /Users/roy/.python-eggs/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg-tmp/_mysql.so Expected in: dynamic lookup

他使用的是OS X 10.5,Python 2.5(这个是跟OS X一起来的),还有MySQL 5.1和MySQLdb 1.2.3c1。

有没有什么办法可以解决这个问题呢?

6 个回答

0

是的,MySQLDb这个包是用一个和你系统里不同版本的libmysqlclient编译的。你需要要么找到一个合适的包(先卸载之前的),要么从头开始编译MySQLDb,这样才能和你系统里的库匹配。

我不知道为什么,但我觉得你的同事可能会对这个问题感兴趣:

如何配置Django使用远程MySQL服务器?

1

这个过程有点复杂和困难,但在MacOSX Lion上是可以成功的。

你需要使用:

Xcode
Brew
Port
Pip

确保你已经安装了Xcode(4.X版本),并且你的Mac已经设置好可以找到可执行文件,因为在安装mysql-python的过程中会用到Macports

确保安装了Xcode的命令行工具。

打开Xcode应用程序 >> 选择偏好设置 >> 下载 >> 组件选项卡 >> 命令行工具 >> 点击安装。

接下来在终端中运行以下命令。

xcodebuild -version

如果你遇到这个错误

/usr/bin/xcodebuild -version Error: No developer directory found at /Developer

可以尝试运行:

/usr/bin/xcode-select
这会更新开发者目录的路径。

然后你需要手动切换到新的Xcode安装目录,路径在/Applications下:

sudo /usr/bin/xcode-select -switch /Applications/Xcode.app

参考链接

卸载 mysql [在此之前请备份你的数据!]

sudo rm /usr/local/mysql
sudo rm -rf /usr/local/mysql*
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/My*
edit /etc/hostconfig and remove the line MYSQLCOM=-YES-
sudo rm -rf /Library/Receipts/mysql*
sudo rm -rf /Library/Receipts/MySQL*
sudo rm -rf /var/db/receipts/com.mysql.*

使用brew重新安装Mysql:

brew install mysql

你可能会遇到这个错误。

Error: Cannot write to /usr/local/Cellar

这是解决方法

现在你应该准备好了。

sudo port install py27-mysql

pip install mysql-python

python -c "import MySQLdb"

如果没有看到任何错误,说明MySQLdb已经安装成功。

6

如果你需要在你的电脑上安装 MySQL 和它的 Python 绑定,最好的办法是从头开始安装。以下是我在 OS X 10.4 或 10.5 上安装 MySQLdb 时使用的步骤:

  1. 首先,去 MySQL 的官网 下载适合你系统的 MySQL,使用 dmg 安装包就可以了。

  2. 安装后,MySQL 的默认位置大概在:/usr/local/mysql-5.0.45-osx10.4-i686。接下来,从 /usr/local/mysql/lib 创建一个软链接:

    ln -s ../../mysql-5.0.45-osx10.4-i686/lib mysql

  3. 然后,下载 MySQLdb 的源代码,并解压缩它。

  4. 在解压后的 MySQLdb 目录中,找到并编辑 site.cfg 文件,把 registry_key 注释掉,并把 mysql_config 设置为:

    mysql_config = /usr/local/mysql-5.0.45-osx10.4-i686/bin/mysql_config

  5. 接下来,在 MySQLdb 目录中,按照正常的方式构建 Python 包:

    sudo python setup.py install

  6. 如果上面的步骤都没有问题,可以在新的终端中测试 MySQLdb:

    python -c "import MySQLdb"

如果一切顺利,上面的命令不会返回任何内容。这个例子是针对 OS 10.4 和 MySQL 5.0 的,你可以根据自己使用的工具版本进行替换。

撰写回答