pyodbc与mySQL
我无法通过pyodbc连接到我的MySQL数据库。
这是我脚本的一部分:
import pyodbc
import csv
cnxn = pyodbc.connect("DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost;DATABASE=mydb; UID=root; PASSWORD=thatwouldbetelling;")
crsr = cnxn.cursor()
with open('C:\\skunkworks\\archive\\data\\myfile.csv','r') as myfile:
rows = csv.reader(myfile, delimiter=',', quotechar='"')
for row in rows:
insert_str = 'INSERT into raw_data VALUES(something, something)'
print insert_str
#crsr.execute(insert_str)
cnxn.commit()
myfile.close()
在pyodbc.connect()这一行,我遇到了这个错误:
pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] 数据源名称未找到,且未指定默认驱动程序 (0) (SQLDriverConnectW)')
我还有一个关于这个错误(以及Python脚本的一般情况)的问题。当我以脚本形式运行时,它没有任何提示就失败了(我本来期待看到错误堆栈信息)。我必须手动输入每一行代码才能找到错误发生的位置。
我现在有点懒(没有异常处理)——这是Python脚本在没有异常处理时静默失败的正常行为吗?
[编辑]
我没有使用mysqldb,因为我已经在用pyodbc从另一个来源(MS Access)提取数据。好吧,这不是个好理由——但我已经在和pyodbc打交道了,我真的不想再去处理另一个库/模块/包(不管Python里叫它什么)来完成这个“临时”工作。我只是想把我在Windows环境中的各种数据源的数据转移到Linux上的MySQL。一旦到了Linux,我就能回到正轨了。
这就是整个“脚本”。我只是把上面的代码保存到一个扩展名为.py的文件中,然后在命令行运行python myscript.py。我是在我的XP机器上运行这个的。
6 个回答
MySQLdb(或者叫oursql)和pyodbc这两个库的使用方式是一样的,都是遵循一个叫做DB-API 2的标准。简单来说,如果你用MySQLdb或者oursql,就不用担心ODBC带来的那些麻烦问题。所以我强烈建议你考虑使用MySQLdb或者oursql。
你的驱动程序名称正确吗?
你可以在Windows -> 控制面板 -> 系统和安全 -> 管理工具 -> ODBC 数据源 -> 驱动程序标签里查看你的驱动程序名称,然后把这个名称复制到第一个参数里。
比如说:
cnxn = pyodbc.connect("DRIVER={MySQL ODBC 5.3 ANSI Driver}; SERVER=localhost;DATABASE=books; UID=root; PASSWORD=password;")
这样我的问题就解决了。
或者你可能没有安装这个驱动程序,安装的步骤其实很简单。
我之前也犯过同样的错误,所以我检查了一下我用来连接的所有版本。以下是我发现的:
对于 Python 2.7 32 位版本:
- pyodbc 必须是 32 位的
- 数据库驱动程序也必须是 32 位的。(Microsoft Access 也应该是 32 位的)
如果你使用的是 64 位版本,那么你也要确保所有的东西都是 64 位的。
在我的情况下,我是想连接到 Oracle 数据库和 Microsoft Access 数据库,所以我需要确保以下组件的版本一致:
- pyodbc(用于 MS Access)
- python
- cx_Oracle(用于 SQLalchemy 的 Oracle 方言)
- Oracle instantclient basic(Oracle。别忘了创建环境变量)
- py2exe(用来制作可执行应用程序)