62

如何使用 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]')
4

3 回答 3

89

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

工作示例:

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)

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

于 2013-05-13T06:14:55.343 回答
26

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

cnxn = connect(driver='{SQL Server}', server='localhost', database='test',               
               trusted_connection='yes')
于 2013-05-13T13:05:06.467 回答
7

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

cnxn = connect(driver='{SQL Server}', server='(local)', database='test',               
               trusted_connection='yes')
于 2017-07-28T15:03:23.953 回答