2010-10-20 47 views
5

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

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

我是有点懒,现在(没有异常处理) - 是一个Python脚本没有异常处理这个正常的行为默默地失败?

[编辑]

,因为我已经使用pyodbc从另一个源(MS接入)提取我的数据,我不使用MySQLdb的

。好吧,不是一个好的理由 - 但我已经在与pyodbc拼杀了,我真的不喜欢与另一个库/模块/软件包(不管它在Python中被称为“一次性”工作)搏斗。我只是想将我的数据从Windows环境中的各种数据源移到Linux上的mySQl。一旦在Linux上,我会回到terra firma。

这是整个'脚本'在那里。我只是将上面的代码保存到扩展名为.py的文件中,然后在命令行运行python myscript.py。我在我的XP机器上运行此操作

+1

为什么不使用mysqldb驱动程序? – 2010-10-20 20:50:51

+0

“当我作为脚本运行”?你究竟做了什么?请提供一些关于你做了什么的暗示。什么OS?什么壳牌? – 2010-10-20 20:54:54

+0

“我真的不喜欢与另一个库/模块/软件包(无论它在Python中被称为”一次性“工作)搏斗”这违反了Python世界观。看来我们所做的只是下载新的软件包并与他们搏斗。使用包装来达到预期目的非常重要。 'pyodbc'可能无法连接到MySQL。期。 – 2010-10-20 21:14:19

回答

1

MySQLdb(或oursql)和pyodbc都具有相同的接口(DB-API 2),只有在使用前者时才需要处理ODBC问题。我强烈建议你考虑使用MySQLdb(或oursql)。

+1

MySQLdb不能安装在Windows上。作者几乎接受它在Windows上被破坏/不受支持。 – skyeagle 2010-10-20 21:20:42

+0

我确实提到了另一种选择。 – 2010-10-20 21:21:18

+0

另外,这:http://stackoverflow.com/questions/645943/mysql-for-python-in-windows – 2010-10-20 22:55:14

2

首先,按照official docs,如果你想在不创建一个DSN连接,您需要在连接字符串中指定OPTION = 3:

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

如果无法工作,我d通过创建DSN进一步进行故障排除。

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

+0

由于一些奇怪的原因,我现在在控制台上获取堆栈跟踪。脚本仍然可以与你建议的[修改]连接字符串一起工作。尽管我找到了解决方案。我在我的Linux机器上安装了MySQLdb,因此我只需将我的csv文件复制到我的Linux机器上,然后在我的Linux机器上进行数据导入:( – skyeagle 2010-10-20 21:36:24

2

只需要安装mysql-连接器-ODBC-3.51.28-win32.msi。

和pyodbc-2.1.7.win32-py2.7.exe。

当然,你已经准备好安装MySQL和python 2.7了。

例如:

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` 
+0

'dBase'没有定义,您的意思是'ptdBase'? – 2016-05-25 15:59:32

1

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

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

对于那些使用64位版本的人。你应该检查一切都是64位。

在我来说,我试图connecto到Oracle数据库和Microsoft Access数据库,所以我不得不作出以下几部分组成architechture版本匹配:

  • pyodbc(MS接入)
  • 蟒蛇
  • cx_Oracle(甲骨文方言的SQLAlchemy)
  • 甲骨文instantclient基本(甲骨文。不要忘了创建环境变量)
  • py2exe(制造excecutable应用程序)
0

是你的驱动程序名称正确吗? >控制面板 - - >系统和安全 -

可以 的Windows检查驱动程序名称>管理工具 - > ODBC数据源 - >驱动程序选项卡 然后河名复制到第一个参数

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

我的问题解决了

或者您可能无法安装驱动程序,而且步骤很简单。