我无法使用 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/