6

我无法使用 pyodbc 连接到 mySQl db。

这是我的脚本的一个片段:

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] Data source name not found and no default driver specified (0) (SQLDriverConnectW)')

我对这个错误(以及一般的 Python 脚本)还有另一个问题。当我将其作为脚本运行时,它会静默失败(我期待堆栈跟踪)。我必须手动输入每一行才能找到错误发生的位置。

我现在有点懒惰(没有异常处理) - 没有异常处理的 Python 脚本的这种正常行为是否会静默失败?

[编辑]

我没有使用 mysqldb,因为我已经在使用 pyodbc 从另一个源(MS Access)提取我的数据。好吧,这不是一个很好的理由 - 但我已经在努力解决 pyodbc 问题,而且我真的不想为了“一次性”工作而不得不与另一个库/模块/包(无论它在 Python 中调用什么)搏斗。我只想将我的数据从 Windows 环境中的各种数据源移动到 Linux 上的 mySQl。一旦在 Linux 上,我将回到 terra Firma。

那就是那里的整个“脚本”。我刚刚将上面的代码保存到一个扩展名为 .py 的文件中,然后在命令行运行 python myscript.py。我在我的 XP 机器上运行它

4

6 回答 6

3

我有同样的错误,所以我检查了我用于连接的所有版本。这是我发现的:

对于 Python 2.7 32 位: - pyodbc 必须是 32 位 - DB 驱动程序必须是 32 位。(Microsoft Access 也应该是 32 位的)

对于那些使用 64 位版本的人。您应该检查所有内容是否也是 64 位。

在我的情况下,我试图连接到 Oracle DB 和 Microsoft Access DB,所以我必须使以下组件与架构版本匹配:

  • pyodbc (MS 访问)
  • Python
  • cx_Oracle(SQLalchemy 的 Oracle 方言)
  • Oracle Instantclient basic(Oracle。不要忘记创建环境变量)
  • py2exe(制作可执行的应用程序)
于 2015-01-16T20:16:25.813 回答
2

only need install mysql-connector-odbc-3.51.28-win32.msi.

and pyodbc-2.1.7.win32-py2.7.exe.

of course, you have ready installed MySQL and python 2.7.

example:

import pyodbc

cndBase = pyodbc.connect("DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; PORT=3306;DATABASE=nameDBase; UID=root; PASSWORD=12345;") 
ptdBase = cndBase.cursor()

query_str = 'SELECT* FROM nameTabla;'
rows  = ptdBase.execute(query_str)

for rw in rows:
    print list(rw)`enter code here`
于 2011-04-17T18:57:07.947 回答
2

首先,根据官方文档,如果要在不创建 DSN 的情况下进行连接,则需要在连接字符串中指定 OPTION=3:

ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=test;USER=venu;PASSWORD=venu;OPTION=3;"

如果这不起作用,我将通过创建 DSN 来进一步排除故障。

其次,任何 Python 都不应该默默地失败。如果在您运行脚本时出现这种情况,那么还有其他问题。

于 2010-10-20T21:20:43.883 回答
2

MySQLdb(或oursql)和pyodbc 都具有相同的接口(DB-API 2),如果您使用前者,则不必处理ODBC 的问题。我强烈建议您考虑改用 MySQLdb(或 oursql)。

于 2010-10-20T21:09:59.710 回答
2

你的司机名字对吗?

您可以在Windows -> 控制面板 -> 系统和安全 -> 管理工具 -> ODBC 数据源 -> 驱动程序选项卡中检查您的驱动程序名称, 然后将河流名称复制到第一个参数

喜欢

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

我的问题解决了

或者您可能没有安装驱动程序,步骤很简单。

于 2016-11-02T05:44:06.780 回答
0

我遇到了同样的错误。我用来建立连接的驱动程序似乎不是我系统中安装的驱动程序。在 Windows 运行中键入 ODBC,然后根据您安装驱动程序的位置选择 ODBC 数据源(32/64)。从那里单击系统 DSN,然后单击添加。从那里您可以看到系统中安装的 MySQL 驱动程序。在进行连接的代码中使用 ANSI 驱动程序。

于 2019-09-24T18:42:55.177 回答