无法从服务器下载 SQL 数据库

Unable to download SQL database from server

有人要求我使用 pyodbc 下载一些数据,但是我遇到了一些问题,代码如下:

import pyodbc
import pandas as pd
    
conn = pyodbc.connect("Driver={SQL Server};"
                      "Server=database.net;"
                      "Database=Spectrometry;"
                      "uid=user;pwd=password")
    
Users = pd.read_sql("SELECT * FROM Users", conn)
Activity = pd.read_sql("SELECT * FROM Activity", conn)

执行此操作后我得到:

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

我觉得您在编写代码时可能犯了一个小错误。查看 documentation 和示例可用。

我认为应该是:

import pyodbc
import pandas as pd
    
conn = pyodbc.connect("Driver=SQL Server;"  #  <= No {} needed
                      "Server=database.net;"
                      "Database=Spectrometry;"
                      "uid=user;pwd=password")
    
Users = pd.read_sql("SELECT * FROM Users", conn)
Activity = pd.read_sql("SELECT * FROM Activity", conn)

我可能要补充的另一件事是,您是否检查了您的设置中可用的 odbc 驱动程序? 我建议你 运行:

import pyodbc
pyodbc.drivers()

它应该会为您提供可用驱动程序名称的列表(您需要在连接方法中指定的名称)。如果列表为空,您可能需要查看如何在您的环境中安装 odbc 驱动程序。 对于 sql 服务器版本 15,它们可用 here

连接字符串

正在使用实例名称连接到命名实例 instance1:

connSqlServer = pyodbc.connect('DRIVER={SQL Server Native Client 10.0};SERVER=192.106.0.102\instance1;DATABASE=master;UID=sql2008;PWD=password123')

正在使用 TCP/IP 使用端口号 1443 连接到命名实例:

connSqlServer = pyodbc.connect('DRIVER={SQL Server Native Client 10.0};SERVER=192.106.0.102,1443;DATABASE=master;UID=sql2008;PWD=password123')

pyodbc.connect() 支持关键字,我认为这些更易于阅读,如果您使用变量作为连接字符串属性,则无需进行任何字符串格式化:

命名实例:

connSqlServer = pyodbc.connect(driver='{SQL Server Native Client 10.0}',
                               server='192.106.0.102\instance1',
                               database='master',
                               uid='sql2008',pwd='password123')

TCP/IP 端口:

connSqlServer = pyodbc.connect(driver='{SQL Server Native Client 10.0}',
                               server='192.106.0.102,1443',
                               database='master',
                               uid='sql2008',pwd='password123')