使用Python使用Windows身份验证连接到MS SQL Server吗?

如何使用Windows身份验证和pyodbc库连接MS SQL Server?

我可以通过MS Access和SQL Server Management Studio进行连接,但无法获得适用于Python的有效连接ODBC字符串。

这是我尝试过的方法(也没有'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]')
3个解决方案
61 votes

您可以将连接字符串指定为使用分号(;)作为参数分隔符的一个长字符串。

工作示例:

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)

(请注意,各个字符串组件之间没有逗号。)

Gord Thompson answered 2020-08-01T15:49:20Z
20 votes

也可以使用关键字指定Windows身份验证。 功能上与接受的答案没有什么不同,我认为这使代码格式化更加容易:

cnxn = connect(driver='{SQL Server}', server='localhost', database='test',               
               trusted_connection='yes')
Bryan answered 2020-08-01T15:49:41Z
1 votes

我只是想添加一些东西,因为我在这里看到使用本地主机的解决方案。 以我的经验,SQL Server对此有疑问,不确定是ODBC驱动程序还是服务本身,如果您不想指定本地计算机名称,则首选使用(local)。

cnxn = connect(driver='{SQL Server}', server='(local)', database='test',               
               trusted_connection='yes')
Allan Elder answered 2020-08-01T15:50:01Z
translate from https://stackoverflow.com:/questions/16515420/connecting-to-ms-sql-server-with-windows-authentication-using-python