Django - MySQLdb: Symbol not found: _mysql_affected_rows
Django - MySQLdb: Symbol not found: _mysql_affected_rows
一个同事在尝试使用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。
有没有办法解决这个问题?
问题:Django - MySQLdb: Symbol not found: _mysql_affected_rows
原因:MySQLDb egg的编译版本与系统中存在的libmysqlclient版本不一致。需要获取正确的egg(卸载之前的版本)或者从头开始构建MySQLDb,使其与系统中的库进行编译。
解决方法:请参考以下链接:Configuring Django to use remote mysql server?
Django - MySQLdb: Symbol not found: _mysql_affected_rows问题的出现原因:
该问题的出现是因为在使用Django和MySQLdb时,链接到MySQL时出现了一个符号未找到的错误。具体原因可能是MySQL绑定在安装过程中出现了一些问题。
解决方法:
解决该问题的方法是重新从头安装mysql和其Python绑定。下面是在OS X 10.4或10.5上安装MySQLdb时使用的步骤:
1. 首先安装MySQL,可以从MySQL官网下载dmg安装文件进行安装。
2. 打开终端,进入/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安装目录下的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的情况,具体版本可根据实际情况进行替换。
需要注意的是,如果使用的是OSX 10.7系统,还需要在编译和链接标志中添加"-arch x86_64"标志。具体做法是找到MySQLdb-python包中的setup_posix.py文件,在构建ext_options的部分,将extra_compile_args和extra_link_args的值分别修改为以下内容:
extra_compile_args = extra_compile_args + ['-arch', 'x86_64'] extra_link_args = extra_link_args + ['-arch', 'x86_64']
以上就是解决Django - MySQLdb: Symbol not found: _mysql_affected_rows问题的方法。按照上述步骤重新安装MySQLdb,可以解决链接到MySQL时出现的符号未找到错误。
在使用Django和MySQLdb时,可能会遇到一个问题:Symbol not found: _mysql_affected_rows。下面是这个问题出现的原因和解决方法。
原因:
这个问题可能是由于安装MySQL-python时出现了一些错误或者配置问题导致的。
解决方法:
以下是解决该问题的步骤:
1. 确保你已经安装了Xcode(4.X)并且你的Mac已经配置好了找到可执行文件,因为在安装mysql-python的过程中,Macports会使用到它。同时也确保安装了Xcode的命令行工具(Command Line Tools)。
2. 打开Xcode应用程序,进入Preferences,点击Components选项卡,然后点击Command Line Tools,最后点击Install按钮进行安装。
3. 在终端中运行以下命令检查Xcode的版本:
xcodebuild -version
4. 如果出现错误信息"/usr/bin/xcodebuild -version Error: No developer directory found at /Developer",尝试运行以下命令更新开发者目录路径:
/usr/bin/xcode-select
5. 手动切换到新的Xcode安装目录,将以下命令中的"/Applications/Xcode.app"替换为你的Xcode安装路径:
sudo /usr/bin/xcode-select -switch /Applications/Xcode.app
6. 卸载MySQL(在此之前请备份你的数据):
sudo rm /usr/local/mysql sudo rm -rf /usr/local/mysql* sudo rm -rf /Library/StartupItems/MySQLCOM sudo rm -rf /Library/PreferencePanes/My* sudo nano /etc/hostconfig(删除包含MYSQLCOM=-YES-的行) sudo rm -rf /Library/Receipts/mysql* sudo rm -rf /Library/Receipts/MySQL* sudo rm -rf /var/db/receipts/com.mysql.*
7. 使用brew重新安装MySQL:
brew install mysql
8. 安装py27-mysql:
sudo port install py27-mysql
9. 使用pip安装mysql-python:
pip install mysql-python
10. 运行以下命令检查是否成功安装了MySQLdb:
python -c "import MySQLdb"
如果没有看到任何错误信息,则表示成功安装了MySQLdb。