【问题标题】:Connecting Python to Remote SQL Server将 Python 连接到远程 SQL Server
【发布时间】:2021-06-19 13:09:21
【问题描述】:

我正在尝试将 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)

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

OperationalError: ('08001', '[08001] [Microsoft][ODBC Driver 17 for SQL Server]TCP 提供程序: 不知道这样的主机。\r\n (11001) (SQLDriverConnect); [08001] [Microsoft ][适用于 SQL Server 的 ODBC 驱动程序 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;"
                  )

连接 = pyodbc.connect(connection_str) data = pd.read_sql("select top 1 * from dbo.t_location with (nolock);",connection)

我使用了上面的代码,现在我看到了这个错误。似乎它有效但无法登录。通常,一旦我将凭据用于登录远程桌面,我就必须在 SSMS 中使用 Windows 身份验证。

('28000', "[28000] [Microsoft][SQL Server Native Client 11.0][SQL Server]用户 'dom\user' 登录失败。(18456) (SQLDriverConnect); [28000] [Microsoft][ SQL Server Native Client 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()

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

【问题讨论】:

  • 错误消息的重要部分是:找不到服务器或无法访问。检查您动态生成的连接字符串 FIRST 并验证它是否具有正确的信息。如果正确,请尝试connection troubleshooter
  • 在调试时,请停止在查询中使用 3 个部件名称。连接应该确定数据库。使用 3 个部分名称(例如 DB.SCHEMA.TABLE)会使您的代码更难迁移到不同的环境。
  • "我们有 2 台服务器。一台是数据库服务器,但我使用 SQL 应用程序服务器连接到数据库服务器。" - 听起来您正在尝试连接到错误的服务器。对于直接数据库连接,您需要连接到运行数据库服务器软件的机器。

标签: python sql-server pyodbc remote-server


【解决方案1】:

你可以使用这个功能:

def connectSqlServer(Server , Database , Port , User , Password):
    try:
        conn = pyodbc.connect('Driver={SQL Server}; Server='+Server+'; 
Database='+Database+'; Port='+Port+'; UID='+User+'; PWD='+Password+';')
        cursor = conn.cursor()


except Exception as e:
    print("An error occurred when connecting to DB, error details: {}".format(e))
    return False, None
else:
    return True, cursor

【讨论】:

  • 嗨@Abdulmohsen 我试过你的功能,但得到了同样的错误。在尝试连接到远程 SQL 服务器时,我应该记住任何特定的过程吗?
  • @HabibKhan 您好,您可以使用 ssms 连接到您的数据库吗?似乎是与网络相关的问题,很可能端口 1433 未对您的数据库服务器开放。
  • 感谢您的回复。真的很感激。是的,当我打开 SSMS 时,它似乎工作正常。我认为问题可能出在端口或防火墙上。我会四处看看,看看能不能找到别的东西。
【解决方案2】:

最后要回答我的问题,我不得不使用 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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    相关资源
    最近更新 更多