看本文之前也可以看这篇文章,流程一样更简练些,我是写完自己的总结以后才发现的,内容很像但属于巧合。也许因为同一个问题基本上就是同种解决方式,大家可能都是不断搜索尝试他人的方法后总结的吧。
http://blog.csdn.net/qq_26808915/article/details/50256717
正文:
用Python开发数据库方面的程序自然需要适用于Python语言的api(或者说是module/模块),目前Python自身并不包括与具体类型数据库(比如本文说的MySQL)进行交互(比如建立连接,增删改查)的关键api,只有一些统一接口(?)。或许将来python会内嵌了各种数据库操作api也说不定。Python数据库接口支持很多种数据库,本文只说MySQL。
我使用的win10系统,在说下面步骤之前,我已经在电脑上安装了MySQL-5.7的服务端以及Python2.7,均是64bit的版本。
在Python中使用MySQL需要安装MySQLdb,然后使用时import这个模块就行了。按照网上的教程,我在连接网页下载了MySQL-python-1.2.5.win32-py2.7.exe,然后安装。安装过程中弹出错误页面(忘了截图),大概的意思是Python不在注册表中:python version 2.7 required,which was not found in the registry。出现这个问题的话,在任意目录下创建一个.py的Python脚本(比如register.py),里面的内容是:
import sys
from _winreg import *
# tweak as necessary
version = sys.version[:3]
installpath = sys.prefix
regpath = "SOFTWARE\\Python\\Pythoncore\\%s\\" % (version)
installkey = "InstallPath"
pythonkey = "PythonPath"
pythonpath = "%s;%s\\Lib\\;%s\\DLLs\\" % (
installpath, installpath, installpath
)
def RegisterPy():
try:
reg = OpenKey(HKEY_CURRENT_USER, regpath)
except EnvironmentError as e:
try:
reg = CreateKey(HKEY_CURRENT_USER, regpath)
SetValue(reg, installkey, REG_SZ, installpath)
SetValue(reg, pythonkey, REG_SZ, pythonpath)
CloseKey(reg)
except:
print "*** Unable to register!"
return
print "--- Python", version, "is now registered!"
return
if (QueryValue(reg, installkey) == installpath and
QueryValue(reg, pythonkey) == pythonpath):
CloseKey(reg)
print "=== Python", version, "is already registered!"
return
CloseKey(reg)
print "*** Unable to register!"
print "*** You probably have another Python installation!"
if __name__ == "__main__":
RegisterPy()
然后在该文件目录下,打开cmd执行python <脚本名> 运行这个脚本就行了(前提是配置了Python环境变量,和java等一样的配置方式)。显示注册成功以后再运行之前的.exe,结果成功了。于是赶紧import MySQLdb试试,没想到又报错:
Traceback (most recent call last):
import cx_Oracle
ImportError: DLL load failed: %1 不是有效的 Win32 应用程序。
也就是大概是说Python是64位的,你这个MySQLdb程序却是32位的,所以不行。
于是各种找64位的MySQLdb-python,结果发现资源不多(可能是我不会找),Python官网以及MySQL上都没有,有些地方下载需要积分,由于囊中羞涩,所以暂时没有选择需要积分的,接着找。找到一个这样的网站:http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python,各种Python的扩展包,然后发现没有想要的exe的文件,都是.whl的文件,搜索后发现安装这种文件需要用Python自带脚本pip.exe(在Python安装目录的scripts目录下),于是下载了一个MySQL_python-1.2.5-cp27-none-win_amd64.whl用pip install命令安装,可惜安装后还是不行,显示当前已经满足条件,mysql已经在site-packets目录下。猜想是32位的包造成的,于是删除所有有关的包,用pip install MySQL-python命令打算直接安装MySQL-python.令人头疼的是又出现新的error: Microsoft Visual C++ 9.0 is required...好吧,又到网上下载vc++for python进行安装,结束以后再试...还是报错:
Microsoft\\Visual C++ for Python\\9.0\\VC\\Bin\\cl.exe' failed with exit status 2
接着搜索一番,发现又回到原点:解决这个问题需要安装64位的MySQLdb,但是可惜的是多个文章中提到的http://www.codegood.com/archives/这个网站已经不能用了。没办法,搜索MySQL-python-1.2.3.win-amd64-py2.7.exe的百度网盘资源,结果终于找到(http://www.panduoduo.net/r/15776780)。下载完以后安装,没有遇到之前的任一个问题,一切顺利。在命令行中Python环境下执行import MySQLdb命令,没有出现任何信息,用dir(MySQLdb)命令查看,发现已经正常导入了。。。
饶了个大弯,总结起来就两点有用:
①win10下,如果Python是64位的话,MySQL-python就直接找64位的资源,否则出现各种意想不到的问题;
②出现"注册表中没有Python"的问题就执行上述脚本(还有其他方法,自查)。