pyodbc 和 mySQL

发布于 2024-09-28 12:30:30 字数 1239 浏览 4 评论 0原文

我无法使用 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 驱动程序管理器] 数据 未找到源名称且无默认值 指定驱动程序 (0) (SQLDriverConnectW)')

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

我现在有点懒(没有异常处理)——这是没有异常处理的 Python 脚本的正常行为吗?

[编辑]

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

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

I am unable to connect to mySQl db using pyodbc.

Here is a snippet of my script:

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()

I get this error at the pyodbc.connect() line:

pyodbc.Error: ('IM002', '[IM002]
[Microsoft][ODBC Driver Manager] Data
source name not found and no default
driver specified (0)
(SQLDriverConnectW)')

I have another question regarding this error (and Python scripts in general). When I run this as a script, it fails silently (I was expecting a stack trace). I have to type each line in manually to find where the error occured.

I am being a bit lazy for now (no exception handling) - is this normal behaviour of a Python script without exception handling to fail silently?

[Edit]

I am not using mysqldb because I am already using pyodbc to extract my data from another source (MS Access). Ok, not a good reason - but I am already grappling with pyodbc and I dont really fancy having to wrestle with another library/module/package(whatever its called in Python) for a "one off" job. I just want to move my data of from various data sources in the Windows environment to mySQl on Linux. once on Linux, I'll be back on terra firma.

That is the entire 'script' right there. I just saved the code above into a file with a .py extension, and I run python myscript.py at the command line. I am running this on my XP machine

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

萌梦深 2024-10-05 12:30:30

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

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

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

就我而言,我试图连接到 Oracle DB 和 Microsoft Access DB,因此我必须使以下组件与体系结构版本匹配:

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

I had this same mistake so I went over all the version I was using for the connection. This is what I found out:

For Python 2.7 32 bits:
- pyodbc must be 32bits
- the DB Driver must be 32bits. (Microsoft Access should be 32 bits too)

For those who use the 64 bits version. You should check that everything is 64 bits too.

In my case I was trying to connecto to an Oracle DB and Microsoft Access DB so I had to make the following components match the architechture version:

  • pyodbc (MS Access)
  • python
  • cx_Oracle (Oracle dialect for SQLalchemy)
  • Oracle instantclient basic (Oracle. Do not forget to create the environment variable)
  • py2exe (Making the excecutable app)
静若繁花 2024-10-05 12:30:30

你的司机名字对吗?

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

就像

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

我的问题解决了

,否则您可能不会安装驱动程序,步骤很简单。

Is that your driver name right?

You can check your driver name in
Windows -> Control panel -> System and security -> Administrative tools -> ODBC Data Sources -> Driver tab
then copy the river name to the first parameter

like

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

And my problem solved

or you may not install the driver and the step is simple.

柳若烟 2024-10-05 12:30:30

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

MySQLdb (or oursql) and pyodbc both have the same interface (DB-API 2), only you don't have to deal with ODBC's issues if you use the former. I strongly recommend you consider using MySQLdb (or oursql) instead.

无人问我粥可暖 2024-10-05 12:30:30

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

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

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

第二,Python 不应该默默地失败。如果运行脚本时出现这种情况,则说明存在其他问题。

First, According to the official docs, if you want to connect without creating a DSN, you need to specify OPTION=3 in the connection string:

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

If that fails to work, I'd further troubleshoot by creating a DSN.

Second, no Python should not be failing silently. If that is the case when you run your script, there is something else amiss.

贪恋 2024-10-05 12:30:30

只需要安装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`

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`
北笙凉宸 2024-10-05 12:30:30

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

I was getting the same error. It seemed the driver i was using to make the connection was not the driver installed in my system.
Type ODBC on windows run and select ODBC Data Source(32/64) based on where you have installed the driver.
From there click on System DSN and click add. From there you can see the MySQL driver installed in your system. Use the ANSI driver in your code where you are making the connection.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文