2013-09-17 2 views
3

Я использую ActivePython 2.7.2.5 на Windows 7.Не удается установить соединение с SQL-сервером, используя pyodbc на Windows 7

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

КОД:

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:

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)') 

ответ

5

Вы коммутационный строку '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) 
+0

Это сделал это! Большое спасибо. –

+0

@JamesNicholson Вы также захотите удалить атрибут 'trusted_connection' из строки подключения, поскольку вы задаете имя пользователя и пароль. Вы можете использовать либо проверку подлинности Windows (атрибут trusted_connection), либо аутентификацию SQL Server (атрибуты «пользователь» и «пароль»), но не оба. В моем тестировании, если оба они поставляются, по умолчанию установлено подключение к аутентификации Windows. – Bryan

+0

@beargle вы можете представить ответ, который содержит примеры кода? Было бы очень полезно увидеть, как вы строите строку соединения в обоих случаях. Благодарю. –

0

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

4

У меня было такое же сообщение об ошибке, и в моем случае проблема заключалась в том, что драйверу [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) 
+2

Спасибо, наконец-то, что сработало для меня! – RoundFour

+0

работает как шарм – om471987

0

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

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

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

Смежные вопросы