将 Python 连接到远程 SQL Server

hka*_*kay 4 python sql-server pyodbc remote-server

我正在尝试将 Python 连接到我们的远程 SQL Server,但我没有得到它。以下是我使用的代码。

 server = 'server,1433' 
 database = 'db' 
 username = 'username' 
 password = 'pw' 
 cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
 cursor = cnxn.cursor()
 cursor.execute('SELECT top 1 * FROM db.dbo.t_location')
 for row in cursor:
     print(row)
Run Code Online (Sandbox Code Playgroud)

我们有 2 台服务器。一种是数据库服务器,但我使用连接到数据库服务器的 SQL 应用程序服务器。这是我收到的错误。我尝试了一个星期,但我不确定我在这里错过了什么。任何帮助,将不胜感激

操作错误: ('08001', '[08001] [Microsoft][适用于 SQL Server 的 ODBC 驱动程序 17]TCP 提供程序: 没有已知的此类主机。\r\n (11001) (SQLDriverConnect); [08001] [Microsoft][ODBC SQL Server 驱动程序 17]登录超时已过期 (0);[08001] [Microsoft][SQL Server ODBC 驱动程序 17]建立与 SQL Server 的连接时出现网络相关或实例特定的错误。未找到服务器或无法访问。请检查实例名称是否正确以及 SQL Server 是否配置为允许远程连接。有关详细信息,请参阅 SQL Server 联机丛书。(11001)')

添加:

connection_str = ("Driver={SQL Server Native Client 11.0};"
                  "Server= 10.174.124.12,1433;"
                  #"Port= 1433;"
                  "Database=AAD;"
                  "UID=dom\user;"
                  "PWD=password;"
                  )
Run Code Online (Sandbox Code Playgroud)

连接 = pyodbc.connect(connection_str) data = pd.read_sql("使用 (nolock) 从 dbo.t_location 选择顶部 1 *;",connection)

我使用了上面的代码,现在我看到了这个错误。貌似可以用,但是登录失败。通常,一旦我输入凭据登录远程桌面,我就必须在 SSMS 中使用 Windows 身份验证。

('28000', "[28000] [Microsoft][SQL Server Native Client 11.0][SQL Server]用户 'dom\user' 登录失败。(18456) (SQLDriverConnect); [28000] [Microsoft][SQL Server Native客户端 11.0][SQL Server]用户“dom\user”登录失败。(18456)")

回答:

我很高兴终于找到了使用 pymssql 的解决方案。我不知道 pyodbc 不起作用,但我确信我一定做错了什么。我使用下面的代码使用 Python 从远程 SQL 服务器获取数据。

import pymssql

conn = pymssql.connect(
    host=r'10.174.124.12',
    user=r'dom\user',
    password=r'password',
    database='db'
)
cursor = conn.cursor(as_dict=True)
cursor.execute('Select top 4 location_id, description from t_location with (nolock)')
data = cursor.fetchall()
data_df = pd.DataFrame(data)

cursor.close()
Run Code Online (Sandbox Code Playgroud)

此时忽略我的代码。我仍然需要做一些清理工作,但是这段代码可以工作。

hka*_*kay 5

最后为了回答我的问题,我不得不使用有效的 pymssql 。我不必输入让我感到困惑的端口号。感谢大家抽出时间来回答。

import pymssql

conn = pymssql.connect(
    host=r'10.174.124.12',
    user=r'dom\user',
    password=r'password',
    database='db'
)
cursor = conn.cursor(as_dict=True)
cursor.execute('Select top 4 location_id, description from t_location with (nolock)')
data = cursor.fetchall()
data_df = pd.DataFrame(data)

cursor.close()
Run Code Online (Sandbox Code Playgroud)