pyodbc.OperationalError: SQL Server не существует или доступ запрещен. (17) (SQLDriverConnect); [08001] Драйвер ODBC SQL Server] [

Я искал в Интернете весь день, пробовал много решений, но ни одно из них не работает. Я могу вручную подключиться к этому серверу, но не с помощью Python, я получаю эту ошибку:

pyodbc.OperationalError: ('08001', '[08001] [Microsoft] [Драйвер ODBC SQL Server] [DBNETLIB] SQL Server не существует или доступ запрещен. (17) (SQLDriverConnect); [08001] [Microsoft] [ODBC SQL Драйвер сервера] [DBNETLIB] ConnectionOpen (Connect ()). (5); [08001] [Microsoft] [Драйвер ODBC SQL Server] Недопустимый атрибут строки подключения (0) ')

Я пробовал следующее:

  • A)

    cnx = pyodbc.connect(Driver='{SQL Server}',
                         SERVER=self.DBserver,
                         DATABASE=xyz,
                         username=self.DBusername,
                         password=self.DBpassword,
                         PORT = 1433)
    
  • B)

    cnx = pyodbc.connect('''Driver={SQL Server}; 
                         SERVER=tcp:<self.DBserver>; 
                         PORT=self.DBPort; DATABASE=xyz; 
                         UID=self.DBusername; 
                         PWD=self.DBpassword''')
    
  • C)

    cnx = = pyodbc.connect(Driver='{SQL Server}',
                           SERVER=self.DBserver,
                           DATABASE=xyz,
                           UID=self.DBusername,
                           PWD=self.DBpassword)
    

person Ghost    schedule 31.01.2020    source источник
comment
Ваш второй пример не будет работать так, как написано, потому что вы будете передавать литерал self.DBusername, а не значение этого свойства. Однако ваш второй пример действительно использует правильные имена атрибутов UID= и PWD=. Кроме того, драйверы Microsoft ODBC не используют PORT=, но вы указали порт как 1433, так что, по-видимому, это не имеет значения, потому что это значение по умолчанию. Попробуйте второй подход, используя f'''string''', и посмотрите, поможет ли это.   -  person Gord Thompson    schedule 01.02.2020
comment
поэтому я добавил A, B, C пытается попробовать C выше - ваше предложение, которое не помогло. Если я не понял твоего подхода   -  person Ghost    schedule 01.02.2020
comment
Попробуйте жестко запрограммировать значения параметров. Возможно, переменные self не распространяются.   -  person Parfait    schedule 01.02.2020


Ответы (2)


Я предполагаю, что вам нужно что-то еще вроде этого:

cnx = pyodbc.connect('DRIVER={SQL Server};SERVER='+self.DBserver+';DATABASE=xyz;UID='+self.DBusername+';PWD='+self.DBpassword)
person Greg Low    schedule 01.02.2020

Проблема была в брандмауэре. это работает сейчас

person Ghost    schedule 04.02.2020
comment
В следующий раз попробуйте подключиться с помощью клиентского инструмента, такого как SSMS, Azure Data Studio (несмотря на название, это VS Code для баз данных) или mssql-cli. В большинстве случаев ошибка правильная - person Panagiotis Kanavos; 04.02.2020