Не удается подключиться к SQL Экземпляру, если имя сервера взято из input () - PullRequest
1 голос
/ 05 марта 2020

Я играл с pyodb c и по какой-то причине при попытке подключения, если я получаю свойство 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)

Выход Код вывода имени сервера из 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 () в любом реальном проекте

1 Ответ

2 голосов
/ 05 марта 2020

Я попытался:

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, вы сможете подключиться к намеченному серверу.

...