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



我一直在玩pyodbc,出于某种原因,当我试图连接时,如果我从input((获得Server属性,它就找不到服务器,但如果我使用相同的服务器名称并在使用前将其声明为变量,它可以使用完全相同的代码。有人知道这里发生了什么吗?

带输入的代码((

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)

输出从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)

输出变量中的代码输出服务器名称

我曾尝试在输入上使用str((,但没有成功。不太清楚为什么我从输入中获取服务器名称时不喜欢,因为它返回一个字符串,而连接字符串与工作代码完全相同。

我有点好奇为什么在任何真正的项目上都不想使用input((

我尝试过:

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

然后通过DESKTOP-J7PBL8S\NORTHWIND作为输入,输出为:

DESKTOP-J7PBL8S\NORTHWIND
DESKTOP-J7PBL8SNORTHWIND

所以我认为我们发现了问题。input()返回原始字符串,而不考虑的特殊含义。

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

最新更新