PYODBC - 未找到数据源名称且未指定默认驱动程序

use*_*985 10 python sql pyodbc

import pyodbc
connection = pyodbc.connect('Driver = {SQL Server};Server=SIWSQL43A\SIMSSPROD43A;'
                            'Database=CSM_reporting;Trusted_Connection=yes;')
Run Code Online (Sandbox Code Playgroud)

connection = pyodbc.connect('Driver = {SQL Server}; Server = SIWSQL43A\SIMSSPROD43A;'pyodbc.Error:('IM002','[IM002] [Microsoft] [ODBC Driver Manager]未找到数据源名称且没有默认值驱动程序指定(0)(SQLDriverConnect)')

San*_*jiv 55

我也遇到同样的错误。最后我找到了解决方案。

我们可以在本地程序中搜索odbc并检查odbc的版本。就我而言,我有版本 17 和 11。我在连接字符串中使用了 17

在此输入图像描述

'DRIVER={用于 SQL Server 的 ODBC 驱动程序 17}'

  • 我认为这是正确的答案,但可以添加更多细节。指定的驱动程序版本需要与运行代码的本地计算机上安装的驱动程序匹配。驱动程序必须与目标服务器版本兼容,但这基本上不是问题,因为驱动程序具有相当大的兼容性,特别是如果您使用当前的驱动程序版本(目前为版本 17) (6认同)

Avn*_*lok 17

我正在使用 Django 2.2

并在连接到sql-server 2012时遇到相同的错误。花了很多时间来解决这个问题,终于成功了。

我将驱动程序更改为

“驱动程序”:“SQL Server 本机客户端 11.0”

它奏效了。


Gor*_*son 14

不要在Driver关键字后面的空格中添加空格.

这在Windows上失败了......

conn_str = (
    r'DRIVER = {SQL Server};'
    r'SERVER=(local)\SQLEXPRESS;'
    r'DATABASE=myDb;'
    r'Trusted_Connection=yes;'
)
cnxn = pyodbc.connect(conn_str)
Run Code Online (Sandbox Code Playgroud)

......但这有效:

conn_str = (
    r'DRIVER={SQL Server};'
    r'SERVER=(local)\SQLEXPRESS;'
    r'DATABASE=myDb;'
    r'Trusted_Connection=yes;'
)
cnxn = pyodbc.connect(conn_str)
Run Code Online (Sandbox Code Playgroud)

  • “不要在连接字符串中的 Driver 关键字后面放置空格。” 这个对我有用.. 一开始我很困惑,哪里出了问题.. :-) +1 为此.. (3认同)
  • @GordThompson 我发现了我的错误:在 Windows 上你需要使用 `{SQL SERVER}` 驱动程序。所以现在我检查 `os.platform` 字符串并相应地使用正确的连接字符串。 (2认同)
  • @AdrianKeister - 很高兴听到你让它工作了。但是,请注意,Windows 附带的“{SQL Server}”驱动程序相当古老(大约 SQL Server 2000),并且在使用当前版本的 SQL Server 时可能会受到限制。Microsoft 现在维护适用于 Windows、Mac 和(至少某些版本)Linux 的现代 ODBC 驱动程序。“ODBC Driver 17 for SQL Server”目前是最新的。 (2认同)

小智 7

本地 Ms Sql 数据库服务器需要或 {ODBC driver 17 for SQL Server} Azure Sql 数据库需要{ODBC driver 13 for SQL SERVER}

在此处检查已安装的驱动程序 =>已安装的 ODBC 驱动程序

连接到 Azure Sql 数据库的格式是:

import pyodbc
conn = pyodbc.connect('DRIVER={ODBC Driver 13 for SQL Server};'
                      'SERVER=tcp:nameServer.database.windows.net,1433;'
                      'DATABASE=Name database; UID=name; PWD=password;')

Run Code Online (Sandbox Code Playgroud)

连接到 Ms SQL 数据库本地的格式:

import pyodbc
conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};'
                      'SERVER=server.name;' // example Doctor-Notebook\\MSSQLEXPRESS
                      'DATABASE=database.name; Trusted_connection = yes')

Run Code Online (Sandbox Code Playgroud)


小智 5

我遇到了同样的问题,并修复了更改连接字符串的问题,如下所示。写

'DRIVER={ODBC Driver 13 for SQL Server}'
Run Code Online (Sandbox Code Playgroud)

代替

'DRIVER={SQL Server}'
Run Code Online (Sandbox Code Playgroud)

  • 出于某种原因,对我来说相反的效果。所以我建议两者都尝试一下。 (2认同)

小智 5

我遇到了这个问题并正在寻找解决方案。最后,我尝试了https://github.com/mkleehammer/pyodbc/wiki/Connecting-to-SQL-Server-from-Windows中的所有选项,并且仅适用于我的 MSSQL 12“{ODBC Driver 11 for SQL Server} ”有效。就一一尝试吧。第二件重要的事情是您必须获得正确的服务器名称,因为我认真地认为我需要在所有情况下设置 \SQLEXPRESS,但发现您必须准确设置您在服务器属性中看到的内容。屏幕截图上的示例:在此输入图像描述

  • 这引导我找到答案,因为我从教程中获得了“{SQL Server Native Client 11.0}”,而我的仅适用于“{SQL Server}”。 (3认同)
  • 这是错误的。您需要指定运行 python 代码的计算机上安装的驱动程序。例如,当我的代码在我的开发 PC 上运行时,驱动程序 17 在连接到 SQL 2014 服务器时对我有用,但当我将其移动到运行该服务器的同一台服务器时,我的代码就无法工作了。我在开发 PC 上安装了驱动程序 17,但服务器安装了驱动程序 11 和 13。因此,为了使一切保持一致,我在服务器上安装了驱动程序 17,一切正常。 (2认同)