Невозможно установить соединение с sql-сервером, используя pyodbc в Windows 7

Я использую ActivePython 2.7.2.5 на Windows 7.

При попытке подключиться к базе данных sql-сервера с помощью модуля pyodbc, используя приведенный ниже код, я получаю последующую трассировку. Есть идеи, что я делаю не так?

КОД:

import pyodbc
driver = 'SQL Server'
server = '**server-name**'
db1 = 'CorpApps'
tcon = 'yes'
uname = 'jnichol3'
pword = '**my-password**'

cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=server;DATABASE=db1;UID=uname;PWD=pword;Trusted_Connection=yes')
cursor = cnxn.cursor()
cursor.execute("select * from appaudit_q32013")
rows = cursor.fetchall()
for row in rows:
    print row

ПРОСЛЕДИТЬ:

Traceback (most recent call last):
  File "pyodbc_test.py", line 9, in <module>
    cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=server;DATABASE=db1;UID=uname;PWD=pword;Trusted_Connection=yes')
pyodbc.Error: ('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied. (17) (SQLDriverConnect); [01000] [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()). (53)')

7 ответов

Решение

Вы используете строку подключения 'DRIVER={SQL Server};SERVER=server;DATABASE=db1;UID=uname;PWD=pword;Trusted_Connection=yes' вы пытаетесь подключиться к серверу под названием server база данных называется db1 и т. д. Он не использует переменные, которые вы установили ранее, они не используются.

Можно передать параметры строки подключения в качестве аргументов ключевых слов connect функция, чтобы вы могли использовать:

cnxn = pyodbc.connect(driver='{SQL Server}', host=server, database=db1,
                      trusted_connection=tcon, user=uname, password=pword)

У меня было то же сообщение об ошибке, и в моем случае проблема заключалась в том, что драйверы [SQL Server] требовали TLS 1.0, который отключен на моем сервере. Переход на более новую версию SNAC, SQL Server Native Client 11.0 исправил проблему.

Итак, моя строка подключения выглядит так:

cnxn = pyodbc.connect(driver='{SQL Server Native Client 11.0}', 
                      host=server, database=db1, trusted_connection=tcon,
                      user=uname, password=pword)

Я столкнулся с этой ошибкой по другой причине.
Это было потому, что у моего сервера был "порт" помимо адреса.
Я мог бы исправить это, назначив следующее значение параметру "Server" строки подключения.

"...;Server=<server_name>,<port#>;..."

Обратите внимание, что это "запятая", а не "двоеточие" / "точка"

Сегодня у меня была такая же проблема. Я использовал localhost в строке подключения. Избавился от проблемы, заменив localhost на имя сервера. Моя база данных и приложение работают на одном компьютере.

Если у вас нет имени сервера, перейдите в студию управления сервером Sql и выполните запрос ниже, который даст вам имя сервера.

      SELECT @@SERVERNAME

Строка подключения выглядит, как показано ниже

      conn = pyodbc.connect('Driver={SQL Server};'
                      'Server=myServerName;'
                      'Database=mydb;'
                      'Trusted_Connection=yes;')
      cnxn = pyodbc.connect(driver='{SQL Server}', host=server, database=db1,
                       user=uname, password=pword)

print(cnxn)

Я удалил часть «Trusted_Connection», и это сработало для меня.

Различные риски безопасности существуют с любым методом. Если вы используете аутентификацию Sql Server, вы вводите свой идентификатор пользователя / пароль в коде. Но, по крайней мере, вы обрабатываете с теми же учетными данными. Если вы используете аутентификацию Windows, вы должны убедиться, что все возможные пользователи настроены с соответствующими правами на сервере Sql. С помощью аутентификации Sql вы можете настроить только одного пользователя, но несколько человек могут использовать эти разрешения для одного пользователя Sql.

Сначала нам нужно разобраться с синтаксисом:

      cnxn = pyodbc.connect('DRIVER={SQL server};Server=server_name;DATABASE=database_name;Port=Port_Number;UID=username;PWD=password;')

Несколько моментов-

  • Драйвер. Вы можете проверить, напечатав print(pyodbc.drivers()) и оттуда вы сможете выбрать.
  • Сервер. Имя сервера можно проверить, выполнив запрос, выберите @@Servername.
  • База данных. Для базы данных вы можете зарегистрировать свою базу данных, к которой хотите подключиться.
  • Порт. В основном для MS SQL Server это 1433.
  • UID. Учтите, что ключ должен быть UID, не меняйте его на другой ключ. По этой причине у меня возникли сбои. Вставьте имя пользователя.
  • PWD- Вставьте пароль.

ПРИМЕЧАНИЕ. Не меняйте КЛЮЧ, иначе возникнет ошибка.

А Trusted_Connection=yes используется для аутентификации Windows.

Другие вопросы по тегам