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

Posted

技术标签:

【中文标题】PYODBC--未找到数据源名称且未指定默认驱动程序【英文标题】:PYODBC--Data source name not found and no default driver specified 【发布时间】:2018-02-13 05:02:41 【问题描述】:
import pyodbc
connection = pyodbc.connect('Driver = SQL Server;Server=SIWSQL43A\SIMSSPROD43A;'
                            'Database=CSM_reporting;Trusted_Connection=yes;')

错误:

connection = pyodbc.connect('Driver = SQL Server;Server=SIWSQL43A\SIMSSPROD43A;'
    pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')

【问题讨论】:

Geting Data from MSSQL Using pyodbc Error的可能重复 【参考方案1】:

不要在连接字符串中的Driver 关键字后面加空格。

这在 Windows 上失败...

conn_str = (
    r'DRIVER = SQL Server;'
    r'SERVER=(local)\SQLEXPRESS;'
    r'DATABASE=myDb;'
    r'Trusted_Connection=yes;'
)
cnxn = pyodbc.connect(conn_str)

...但这有效:

conn_str = (
    r'DRIVER=SQL Server;'
    r'SERVER=(local)\SQLEXPRESS;'
    r'DATABASE=myDb;'
    r'Trusted_Connection=yes;'
)
cnxn = pyodbc.connect(conn_str)

【讨论】:

"不要在连接字符串中的 Driver 关键字后面加空格。"这个对我有用..我最初很困惑是什么问题.. :-) +1 这个.. 在没有空格的情况下,我仍然在 Windows 上收到此错误消息。 @AdrianKeister - 该错误消息可能有许多不同的原因。请ask a new question 和minimal reproducible example。 @GordThompson 我发现了我的错误:在 Windows 上,您需要使用 SQL SERVER 驱动程序。所以现在我检查os.platform 字符串并相应地使用正确的连接字符串。 @AdrianKeister - 很高兴听到您成功了。但是,请注意,Windows 附带的 SQL Server 驱动程序非常古老(大约是 SQL Server 2000),并且在使用当前版本的 SQL Server 时可能会受到限制。 Microsoft 现在维护适用于 Windows、Mac 和(至少某些版本的)Linux 的现代 ODBC 驱动程序。 ODBC Driver 17 for SQL Server 是当前最新的。【参考方案2】:

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

'DRIVER=ODBC Driver 13 for SQL Server'

而不是

'DRIVER=SQL Server'

【讨论】:

我有你在这里写的方式,但我仍然得到与提问者相同的错误 出于某种原因,相反的情况对我有用。所以我建议两者都试试。 @bernando_vialli 你能在下面看到我的答案吗,我只是把所有可以到位的选项都放好了, @NeelotpalShukla 我正在使用两台机器,一台个人笔记本电脑和一台工作笔记本电脑。出于某种原因,每个工作方式都不同。我不知道为什么 tbh【参考方案3】:

你可以试试

import pyodbc
# Using a DSN
cnxn = pyodbc.connect('DSN=odbc_datasource_name;UID=db_user_id;PWD=db_password')

注意:您需要知道“odbc_datasource_name”。在 Windows 中,您可以搜索 ODBC 数据源。名称将如下所示:

Data Source Name Example

【讨论】:

P.S 我不完全确定要查看哪个选项卡来查找数据源名称。【参考方案4】:

我遇到了这个问题,正在寻找解决方案。最后,我尝试了 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”。 这是错误的。您需要指定安装在运行 python 代码的机器上的驱动程序。例如,当我的代码在我的开发 PC 上运行时,驱动程序 17 在连接到 SQL 2014 服务器时为我工作,但是当我将其移动到运行服务器的同一台服务器时,我的代码不再工作了。我的开发 PC 上安装了驱动程序 17,但服务器安装了驱动程序 11 和 13。因此,为了让每个人都保持一致,我在服务器上安装了 Driver 17 并且一切正常。【参考方案5】:

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

驱动程序和事件之间没有空格

连接 = Driver=SQL Server Native Client 11.0; "Server=servername;" "Database=dbname;" "Trusted_Connection=yes;"

【讨论】:

【参考方案6】:

我正在使用 Django 2.2

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

我把驱动改成

“驱动程序”:“SQL Server Native Client 11.0”

它成功了。

【讨论】:

@Aravind30790 如果有帮助,请支持此解决方案。谢谢! 是的,这很奇怪,我和“@Avnish alok”做了同样的事情,它奏效了。猜猜我们只需要尝试不同的 Driver=xxx 直到它起作用。我正在连接到以下 SQL Server“Microsoft SQL Server 2017 (RTM-GDR) (KB4505224) - 14.0.2027.2 (X64) Jun 15 2019 00:26:19 版权所有 (C) 2017 Microsoft Corporation Web Edition (64-bit)在 Windows Server 2016 Standard 10.0 (Build 14393: ) (Hypervisor) " 我已经安装了 SQL Server 2019,Avnish 的修复也对我有用。【参考方案7】:

试试下面:

import pyodbc

server = 'servername'

database = 'DB'

username = 'UserName'

password = 'Password'

cnxn = pyodbc.connect('DRIVER=ODBC Driver 13 for SQL Server;SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)

cursor = cnxn.cursor()


cursor.execute('SELECT * FROM Tbl')

for row in cursor:
    print('row = %r' % (row,))

【讨论】:

【参考方案8】:

下面的连接字符串正在工作

import pandas as pd
import pyodbc as odbc

sql_conn = odbc.connect('DRIVER=ODBC Driver 13 for SQL Server;SERVER=SERVER_NAME;DATABASE=DATABASE_NAME;UID=USERNAME;PWD=PASSWORD;')

query = "SELECT * FROM admin.TABLE_NAME"
df = pd.read_sql(query, sql_conn)
df.head()

【讨论】:

【参考方案9】:

除了考虑连接字符串本身的其他答案外,可能只需要下载正确的 odbc 驱动程序。我的客户在执行 python 应用程序时遇到了这个问题,这需要它。 您可以通过按 windows + 输入“odbc”来检查。 正确的驱动程序应出现在驱动程序选项卡中。

【讨论】:

【参考方案10】:

你有没有在你的系统机器上安装过任何 SQL 产品? 您可以下载并安装“SQL Server ODBC Driver 13(或任何版本)”,如果您还没有完成,请尝试运行。

【讨论】:

【参考方案11】:

下面的代码很神奇。

 SQLALCHEMY_DATABASE_URI = "mssql+pyodbc://<servername>/<dbname>?driver=SQL Server Native Client 11.0?trusted_connection=yes?UID" \
                              "=<db_name>?PWD=<pass>"

【讨论】:

【参考方案12】:

为您的连接创建一个类似这样的 DSN (ASEDEV) 并尝试使用 DSN 而不是 DRIVER,如下所示:

enter code here
import pyodbc
cnxn = pyodbc.connect('DSN=ASEDEV;User ID=sa;Password=sybase123')
mycur = cnxn.cursor()
mycur.execute("select * from master..sysdatabases")
row = mycur.fetchone()
while row:
    print(row)
    row = mycur.fetchone()`

【讨论】:

【参考方案13】:

如果有人试图访问托管在 azure 中的数据库,请尝试将驱动程序作为 SQL Server 的 ODBC 驱动程序 17 提供

【讨论】:

【参考方案14】:

我在 python3 上遇到了同样的错误,这对我有帮助:

conn = pyodbc.connect('DRIVER=ODBC Driver 17 for SQL Server;'
                      'SERVER=YourServerName;'
                      'DATABASE=YourDatabaseName;UID=USER_NAME;PWD=PASS_WORD;')

记住 python 是区分大小写的,所以你必须提到 DRIVER,SERVER,... 大写。 您可以访问此链接了解更多信息:

https://docs.microsoft.com/en-us/sql/connect/python/pyodbc/step-3-proof-of-concept-connecting-to-sql-using-pyodbc?view=sql-server-ver15

【讨论】:

【参考方案15】:

我也遇到同样的错误。终于找到了解决办法。

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

'DRIVER=ODBC Driver 17 for SQL Server'

【讨论】:

我认为这是正确的答案,但可以添加更多细节。指定的驱动程序版本需要与运行代码的本地计算机上安装的驱动程序相匹配。驱动程序必须与目标服务器版本兼容,但这基本上不是问题,因为驱动程序已经带来了兼容性,特别是如果您使用当前的驱动程序版本(现在是 17 版)【参考方案16】:

我整天都在面对同样的问题,我尝试了所有可能的 ODBC Driver

import pyodbc
connection = pyodbc.connect('Driver = SQL Server;Server=ServerName;'
                            'Database=Database_Name;Trusted_Connection=yes;')

代替Driver = SQL Server,我们可以逐个尝试这些选项,或者您可以使用相应的设置,在我的情况下,最后一个可行:)

Driver=ODBC Driver 11 for SQL Server for SQL Server 2005 - 2014
Driver=ODBC Driver 13 for SQL Server for SQL Server 2005 - 2016
Driver=ODBC Driver 13.1 for SQL Server for SQL Server 2008 - 2016
Driver=ODBC Driver 17 for SQL Server for SQL Server 2008 - 2017

Driver=SQL Server for SQL Server 2000
Driver=SQL Native Client for SQL Server 2005
Driver=SQL Server Native Client 10.0 for SQL Server 2008
Driver=SQL Server Native Client 11.0 for SQL Server 2012

【讨论】:

【参考方案17】:

您需要下载 Microsoft ODBC Driver 13 for SQL Server 来自Microsoft ODBC Driver 13

【讨论】:

【参考方案18】:

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

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

连接到 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;')

连接 Ms SQL Databse Local 的格式:

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

【讨论】:

【参考方案19】:

确保您已安装所有驱动程序和数据库引擎

https://www.microsoft.com/en-us/download/details.aspx?id=54920

【讨论】:

您可能需要MS Access 2013 runtime,具体取决于您的办公室版本,如Microsoft trouble shooting page 中所述。 对我来说,缺少的是数据库引擎 很抱歉投了反对票,我试过删除它,但它被锁定了。 别担心,我不在乎这些点 :) 将链接留在这里可能有一天会帮助知道的人【参考方案20】:

在我的情况下,完全相同的错误是由于在 Azure 虚拟机中运行的 Windows Server 2019 Datacenter 上缺少驱动程序造成的。

我从https://www.microsoft.com/en-us/download/details.aspx?id=56567 安装驱动程序后,问题就消失了。

【讨论】:

以上是关于PYODBC--未找到数据源名称且未指定默认驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

Python SQLAlchemy:未找到数据源名称且未指定默认驱动程序

Pyodbc - “未找到数据源名称,未指定默认驱动程序”

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

Odbc 连接 - [ODBC 驱动程序管理器] 未找到数据源名称且未指定默认驱动程序

ADODB 连接 - 错误:未找到数据源名称且未指定默认驱动程序

未找到 Python MS Access 数据源名称且未指定默认驱动程序 [重复]