如果服务器名称来自 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
,您应该能够连接到预期的服务器。
我一直在玩 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
,您应该能够连接到预期的服务器。