python - pyodbc 和 mySQL

标签 python mysql exception-handling pyodbc

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

关于此错误(以及一般的 Python 脚本),我有另一个问题。当我将其作为脚本运行时,它会无提示地失败(我期待堆栈跟踪)。我必须手动输入每一行以查找错误发生的位置。

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

[编辑]

我没有使用 mysqldb,因为我已经在使用 pyodbc 从另一个来源 (MS Access) 提取数据。好吧,这不是一个很好的理由——但我已经在与 pyodbc 作斗争,我真的不喜欢为了“一次性”工作而与另一个库/模块/包(无论它在 Python 中叫什么)搏斗。我只是想将我的数据从 Windows 环境中的各种数据源移动到 Linux 上的 mySQl。一旦在 Linux 上,我就会回到陆地上。

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

最佳答案

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

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

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

在我的例子中,我试图连接到 Oracle 数据库和 Microsoft Access 数据库,因此我必须使以下组件与体系结构版本相匹配:

  • pyodbc(MS 访问)
  • python
  • cx_Oracle(SQLalchemy 的 Oracle 方言)
  • Oracle instantclient basic(Oracle。不要忘记创建环境变量)
  • py2exe(制作可执行的应用程序)

关于python - pyodbc 和 mySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3982174/

相关文章:

python - 我可以使用带有 Pandas 的正则表达式在两个数据帧之间执行左连接/合并吗?

python:如何检查返回值是否异常

Python Pandas - 获取第一个符合条件的值

mysql - 在 OSX 上通过 SSH 隧道连接到 MySQL 时出错

php - 如何使用 cURL 从网站获取特定数据,然后使用 php 将其保存在我的数据库中

C++ catch block - 通过值或引用捕获异常?

exception-handling - 反腐败层(ACL)中的异常处理

python - 如何使用 nordvpn 服务器作为 python 请求的代理?

Python 兼容性 : Catching exceptions

mysql - SUM Union All 作为 select 语句上的子查询