【问题标题】:pyodbc + MySQL + Windows: Data source name not found and no default driver specifiedpyodbc + MySQL + Windows:未找到数据源名称且未指定默认驱动程序
【发布时间】:2015-02-02 23:42:03
【问题描述】:

我正在尝试使用 pyodbc 连接到 Windows Server 2008 R2 本地主机上的 MySQL 5.6。我在 localhost 上使用了 MySQL 实例的完整安装,包括 ODBC 连接器。我让它漂亮地连接到远程 SQL Server 实例,但在我的一生中,我无法让它连接到本地 MySQL 实例。我使用这个guide from connectionstrings.com 作为参考。

这里有一些代码:

import pyodbc

def create_mssql_conn():
    return pyodbc.connect(r'Driver={SQL Server};Server=MSSQLSRV;Database=ecomm;Trusted_Connection=yes;')

def create_mysql_conn():
    return pyodbc.connect(r'Provider=MSDASQL;Driver={MySQL ODBC 5.6 UNICODE Driver};Server=127.0.0.1;Database=ecomm;User=root;Password=myP@$$w0rd;Option=3;')

# conn = create_mssql_conn() # This one works
conn = create_mysql_conn() # This one breaks
cursor = conn.cursor()
cursor.execute('SELECT * FROM inventory')

while 1:
    row = cursor.fetchone()
    if not row:
        break
    print row

这是错误:

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

我尝试了从添加Provider=MSDASQL; 到将连接字符串中的ANSI 更改为UNICODE 的所有方法。有什么建议吗?

【问题讨论】:

  • 验证已安装的 MySQL 连接器/ODBC 的“位数”是否与您使用的 Python 版本的“位数”匹配:它们必须都是 64 位或都是 32 位。另外,您是否考虑过尝试MySQL Connector/Python
  • 有趣的是,您应该建议使用 Python 连接器。由于时间限制,这正是我为设定最后期限所做的。我只是想让 pyodbc 工作,因为我已经将它导入以从 SQL Server 中提取数据。稍后我将研究“比特”业务。

标签: mysql windows odbc connection-string pyodbc


【解决方案1】:

我遇到了类似的问题。我正在使用 Windows 8 和 mysql。

我解决问题的方法是进入我的

控制面板>系统和安全>管理工具。>ODBC 数据源

32 位或 64 位版本取决于您的计算机。

然后单击系统 DNS 文件。如果您没有看到任何 MySQL 驱动程序,您必须单击添加。它会弹出一个列表,从该列表中选择 MySQL 驱动程序。

对我来说是 MySQL ODBC 5.3 ANSI(他们也有 unicode 驱动程序)。点击完成。完成此操作后,您必须将代码中的连接线更改为您刚刚填写的相应驱动程序。

例如:

def create_mysql_conn():

 return pyodbc.connect(r'Driver={MySQL ODBC 5.3 ANSI Driver};Server=MSSQLSRV;Database=ecomm;Trusted_Connection=yes;')

这应该可行,或者至少它解决了我的连接问题,因为我尝试的所有操作都遇到了各种不同的错误。这就是为我解决问题的原因。

【讨论】:

    【解决方案2】:

    在 Win64 中有两种 ODBC 环境:32 位和 64 位,您可以使用 Python 32 位或 Python 64 位。检查您使用的 Python 版本,然后使用正确版本的odbcad32.exe(32 位版本位于SysWoW64 目录中)来创建 SystemDSN。使用 SystemDSN,您可以检查是否可以连接到数据库。然后尝试从 Python 代码连接到 DB。

    您可以通过我的代码配方列出pyodbc 可用的 ODBC 数据源:https://code.activestate.com/recipes/578815-printing-list-of-odbc-data-sources-with-pyodbc-mod/

    【讨论】:

    • 我猜文件的完整路径是C:\Windows\SysWOW64\odbcad32.exe
    【解决方案3】:

    前往管理工具和 ODBC 数据源。您应该单击 DNS 文件。您很可能会将 Microsoft Access 和 excel 视为唯一可用的数据源,因此您需要添加 SQL Server。我的是 SQL Server 2008 R2,到目前为止,它已经工作了。

    【讨论】:

      【解决方案4】:

      对于提到的错误 "pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')"

      我安装了“Microsoft Access Database Engine 2010 Redistributable 64-bit”,因为我有 64 位系统,然后在 MS Access 数据库的目录中添加了 DSN,它现在可以工作了。 这是有关如何创建 DSN 并连接到 python 的视频链接。 https://www.youtube.com/watch?v=zw9P2wSnoIo

      【讨论】:

        猜你喜欢
        • 2018-02-13
        • 1970-01-01
        • 2013-04-23
        • 2014-12-05
        • 1970-01-01
        相关资源
        最近更新 更多