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

sta*_*r95 46 sql-server odbc windows-authentication pyodbc sql-server-2008-r2

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

我可以通过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]')
Run Code Online (Sandbox Code Playgroud)

Gor*_*son 64

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

工作范例:

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()
Run Code Online (Sandbox Code Playgroud)

对于具有大量参数的连接字符串,以下内容将以相似的方式完成相同的操作:

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

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

  • @mdegges - 不是这样的; Microsoft的ODBC驱动程序将"Trusted_Connection"和"UID"/"PWD"视为互斥.Windows客户端上的"首选"解决方案是通过[runas]以另一个用户身份运行应用程序(https://technet.microsoft.com/en-us/library/cc771525(v = ws.11).aspx) (命令行)或[Shift-Right_click]>"以不同用户身份运行"(GUI).Linux上相应的解决方法是使用FreeTDS ODBC驱动程序,该驱动程序仍然通过`DOMAIN =`连接字符串参数支持旧的NTLM身份验证方案. (7认同)
  • 有什么方法可以传递一组不同的 Windows 身份验证凭据吗?例如'Trusted_Connection=yes;UID=blah;PWD=blah'? (2认同)

Bry*_*yan 20

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

cnxn = connect(driver='{SQL Server}', server='localhost', database='test',               
               trusted_connection='yes')
Run Code Online (Sandbox Code Playgroud)


All*_*der 6

只是想添加一些东西,因为我在这里看到了使用 localhost 的解决方案;根据我的经验,SQL Server 有这个问题,不确定是 ODBC 驱动程序还是服务本身,如果您不想指定本地计算机名称,则更喜欢使用 (local)。

cnxn = connect(driver='{SQL Server}', server='(local)', database='test',               
               trusted_connection='yes')
Run Code Online (Sandbox Code Playgroud)

  • 这个需要更高。`localhost` 对我不起作用。`(本地)` 做到了。 (2认同)