如果服务器名称来自 input(),则无法连接到 SQL 实例

Cannot Connect to SQL Instance IF Server Name is from input()

我一直在玩 pyodbc,出于某种原因,当我尝试连接时,如果我从 input() 获取服务器 属性,它找不到服务器,但是如果我使用相同的服务器名称和事先将其声明为变量,它可以使用完全相同的代码正常工作。有谁知道这里发生了什么?

带输入的代码()

import pyodbc 

driver = '{ODBC Driver 17 for SQL Server}'
instance = input("Please Enter your SQL Instance: ")
connectionstring = f'Driver={driver}; Server={instance}; Trusted_Connection=yes'
conn = pyodbc.connect(connectionstring)
cursor = conn.cursor()
cursor.execute('SELECT name FROM sys.databases')

for row in cursor:
    print(row)

输出 Code output server name from Input()

带变量的代码

import pyodbc 

driver = '{ODBC Driver 17 for SQL Server}'
instance = 'DESKTOP-J7PBL8S\NORTHWIND'
connectionstring = f'Driver={driver}; Server={instance}; Trusted_Connection=yes'
conn = pyodbc.connect(connectionstring)
cursor = conn.cursor()
cursor.execute('SELECT name FROM sys.databases')

for row in cursor:
    print(row)

输出 Code output server name from variable

我试过在输入上使用 str() 但没有成功。不太确定为什么当我从输入中获取服务器名称时它不喜欢,因为它 returns 一个字符串和连接字符串与有效代码完全相同。

我很好奇为什么在任何实际项目中都不想使用 input()

我试过了:

ins1 = input("Please Enter your SQL Instance: ")
ins2 = 'DESKTOP-J7PBL8S\NORTHWIND'

print(ins1)
print(ins2)

然后将 DESKTOP-J7PBL8S\NORTHWIND 作为输入传递,输出为:

DESKTOP-J7PBL8S\NORTHWIND
DESKTOP-J7PBL8S\NORTHWIND

所以我想我们找到了问题所在。 input() returns 未考虑 \ 特殊含义的原始字符串。

因此,如果您只使用一个 \-> DESKTOP-J7PBL8S\NORTHWIND,您应该能够连接到预期的服务器。