pyodbc与mySQL

6 投票
6 回答
50363 浏览
提问于 2025-04-16 05:49

我无法通过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 个回答

2

MySQLdb(或者叫oursql)和pyodbc这两个库的使用方式是一样的,都是遵循一个叫做DB-API 2的标准。简单来说,如果你用MySQLdb或者oursql,就不用担心ODBC带来的那些麻烦问题。所以我强烈建议你考虑使用MySQLdb或者oursql。

3

你的驱动程序名称正确吗?

你可以在Windows -> 控制面板 -> 系统和安全 -> 管理工具 -> ODBC 数据源 -> 驱动程序标签查看你的驱动程序名称,然后把这个名称复制到第一个参数里。

比如说:

cnxn = pyodbc.connect("DRIVER={MySQL ODBC 5.3 ANSI Driver}; SERVER=localhost;DATABASE=books; UID=root; PASSWORD=password;")

这样我的问题就解决了。

或者你可能没有安装这个驱动程序,安装的步骤其实很简单。

3

我之前也犯过同样的错误,所以我检查了一下我用来连接的所有版本。以下是我发现的:

对于 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(用来制作可执行应用程序)

撰写回答