web-dev-qa-db-ja.com

Pythonを使用してWindows認証でMS SQL Serverに接続しますか?

Windows認証とpyodbcライブラリを使用してMS SQL Serverを接続するにはどうすればよいですか?

MS AccessとSQL Server Management Studioを介して接続できますが、Pythonの場合は、正常な接続ODBC= stringを取得できません。

ここに私が試したものがあります('Trusted_Connection=yes'):

pyodbc.connect('Trusted_Connection=yes',
               driver='{SQL Server}', server='[system_name]',
               database='[databasename]')

pyodbc.connect('Trusted_Connection=yes', uid='me',
               driver='{SQL Server}', server='localhost',
               database='[databasename]')

pyodbc.connect('Trusted_Connection=yes',
               driver='{SQL Server}', server='localhost',
               uid='me', pwd='[windows_pass]', database='[database_name]')

pyodbc.connect('Trusted_Connection=yes',
               driver='{SQL Server}', server='localhost',
               database='[server_name]\\[database_name]')

pyodbc.connect('Trusted_Connection=yes',
               driver='{SQL Server}', server='localhost',
               database='[server_name]\[database_name]')

pyodbc.connect('Trusted_Connection=yes',
               driver='{SQL Server}',
               database='[server_name]\[database_name]')
43

接続文字列は、セミコロン(;)引数のセパレータとして。

作業例:

import pyodbc
cnxn = pyodbc.connect(r'Driver={SQL Server};Server=.\SQLEXPRESS;Database=myDB;Trusted_Connection=yes;')
cursor = cnxn.cursor()
cursor.execute("SELECT LastName FROM myContacts")
while 1:
    row = cursor.fetchone()
    if not row:
        break
    print(row.LastName)
cnxn.close()

多数のパラメーターを持つ接続文字列の場合、以下は同じことを実現しますが、多少読みやすい方法で行います。

conn_str = (
    r'Driver={SQL Server};'
    r'Server=.\SQLEXPRESS;'
    r'Database=myDB;'
    r'Trusted_Connection=yes;'
    )
cnxn = pyodbc.connect(conn_str)

(個々の文字列コンポーネントの間にはコンマがないことに注意してください。)

61
Gord Thompson

Windows認証は、キーワードを使用して指定することもできます。受け入れられた答えと機能的に異なるものはありません。コードのフォーマットが少し簡単になると思います。

cnxn = connect(driver='{SQL Server}', server='localhost', database='test',               
               trusted_connection='yes')
20
Bryan

ここでローカルホストを使用したソリューションを見て、何かを追加したかっただけです。私の経験では、SQL Serverにはこれに関する問題があり、そのODBCドライバまたはサービス自体かどうかはわからず、ローカルを指定したくない場合は(ローカル)の使用を好むマシン名。

cnxn = connect(driver='{SQL Server}', server='(local)', database='test',               
               trusted_connection='yes')
1
Allan Elder