pyodbc 和 mySQL
Posted
技术标签:
【中文标题】pyodbc 和 mySQL【英文标题】:pyodbc and mySQL 【发布时间】:2011-04-28 06:51:35 【问题描述】:我无法使用 pyodbc 连接到 mysql db。
这是我的脚本的 sn-p:
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 驱动程序管理器] 数据 未找到源名称且没有默认值 指定驱动程序 (0) (SQLDriverConnectW)')
我对这个错误(以及一般的 Python 脚本)还有另一个问题。当我将其作为脚本运行时,它会静默失败(我期待堆栈跟踪)。我必须手动输入每一行才能找到错误发生的位置。
我现在有点懒(没有异常处理)——没有异常处理的 Python 脚本的这种正常行为是否会静默失败?
[编辑]
我没有使用 mysqldb,因为我已经在使用 pyodbc 从另一个源 (MS Access) 提取我的数据。好吧,这不是一个很好的理由 - 但我已经在努力解决 pyodbc 问题,而且我真的不想为了“一次性”工作而不得不与另一个库/模块/包(无论它在 Python 中调用什么)搏斗。我只想将我的数据从 Windows 环境中的各种数据源移动到 Linux 上的 mySQl。一旦在 Linux 上,我将回到 terra Firma。
这就是整个“脚本”。我刚刚将上面的代码保存到一个扩展名为 .py 的文件中,然后在命令行运行 python myscript.py。我在我的 XP 机器上运行它
【问题讨论】:
你为什么不用mysqldb驱动? “当我将它作为脚本运行时”?你实际上做了什么?请提供一些关于你做了什么的提示。什么操作系统?什么壳牌? “我真的不想为了一份“一次性”工作而不得不与另一个库/模块/包(无论它在 Python 中叫什么)搏斗”这违反了 Python 的世界观。似乎我们所做的只是下载新包并与它们搏斗。将包用于其预期目的很重要。pyodbc
可能无法连接到 MySQL。期间。
查看 Python 应用程序可用的 ODBC 驱动程序的最佳方法是检查调用 pyodbc.drivers()
返回的列表。
【参考方案1】:
我也犯了同样的错误,所以我检查了我用于连接的所有版本。这是我发现的:
对于 Python 2.7 32 位: - pyodbc 必须是 32 位 - 数据库驱动程序必须是 32 位的。 (Microsoft Access 也应该是 32 位的)
适用于使用 64 位版本的用户。您也应该检查所有内容都是 64 位的。
在我的例子中,我试图连接到 Oracle DB 和 Microsoft Access DB,因此我必须使以下组件与架构版本相匹配:
pyodbc(MS 访问) 蟒蛇 cx_Oracle(用于 SQLalchemy 的 Oracle 方言) Oracle 即时客户端基本版(Oracle。不要忘记创建环境变量) py2exe(制作可执行应用)【讨论】:
那是给我的!!非常感谢,这可能又浪费了 10 个小时……我只需要安装 32 位版本的驱动程序,64 位 dsn 变成 32/64 并且正在连接。 pyobc、python、db driver等使用什么命令来查找它是32位还是64位?【参考方案2】:MySQLdb(或oursql)和pyodbc都有相同的接口(@987654321@),只是如果你使用前者你不必处理ODBC的问题。我强烈建议您考虑改用 MySQLdb(或 oursql)。
【讨论】:
MySQLdb 不能安装在 Windows 上。作者几乎接受它在 Windows 上损坏/不受支持。 我确实提到了另一个选项。 另外,这个:***.com/questions/645943/mysql-for-python-in-windows【参考方案3】:首先,根据official docs,如果想在不创建DSN的情况下进行连接,需要在连接字符串中指定OPTION=3:
ConnectionString = "DRIVER=MySQL ODBC 3.51 Driver;SERVER=localhost;DATABASE=test;USER=venu;PASSWORD=venu;OPTION=3;"
如果这不起作用,我会通过创建 DSN 来进一步排除故障。
第二,没有 Python 不应该默默地失败。如果在您运行脚本时出现这种情况,那么还有其他问题。
【讨论】:
出于某种奇怪的原因,我现在在控制台上获取堆栈跟踪。脚本仍然无法使用您建议的 [modified] 连接字符串。我找到了一个解决方案。我已经在我的 Linux 机器上安装了 MySQLdb,所以我只需将我的 csv 文件复制到我的 Linux 机器上并在我的 Linux 机器上进行数据导入:(【参考方案4】:你的司机名字对吗?
您可以检查您的驱动程序名称 Windows -> 控制面板 -> 系统和安全 -> 管理工具 -> ODBC 数据源 -> 驱动程序选项卡 然后将河流名称复制到第一个参数中
喜欢
cnxn = pyodbc.connect("DRIVER=MySQL ODBC 5.3 ANSI Driver; SERVER=localhost;DATABASE=books; UID=root; PASSWORD=password;")
我的问题解决了
或者你可能没有安装驱动,步骤很简单。
【讨论】:
是否可以连接到远程服务器而不是本地主机?我使用 SERVER=10.0.1.235 作为远程 mysql 服务器 IP,但它仍然连接到 localhost 10.0.1.249。我不知道为什么。【参考方案5】:只需要安装mysql-connector-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`
【讨论】:
'dBase' 未定义。你的意思是“ptdBase”吗?【参考方案6】:我遇到了同样的错误。我用来建立连接的驱动程序似乎不是我系统中安装的驱动程序。 在 Windows 运行中键入 ODBC,然后根据您安装驱动程序的位置选择 ODBC 数据源(32/64)。 从那里单击系统 DSN,然后单击添加。从那里您可以看到系统中安装的 MySQL 驱动程序。在进行连接的代码中使用 ANSI 驱动程序。
【讨论】:
以上是关于pyodbc 和 mySQL的主要内容,如果未能解决你的问题,请参考以下文章