【问题标题】:Cannot Connect to SQL Instance IF Server Name is from input()如果服务器名称来自 input(),则无法连接到 SQL 实例
【发布时间】:2020-03-05 15:18:36
【问题描述】:

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

带有 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() ,但没有成功。不太确定为什么它不喜欢我从输入中获取服务器名称,因为它返回一个字符串并且连接字符串与有效的代码完全相同。

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

【问题讨论】:

  • input 提示符下键入实例名称时,您不需要加倍反斜杠。

标签: python-3.x pyodbc


【解决方案1】:

我试过了:

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() 返回原始字符串,不考虑 \ 的特殊含义。

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

【讨论】:

    猜你喜欢
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    相关资源
    最近更新 更多