尝试连接到localhost上的数据库时出现pyodbc连接错误

taf*_*afi 5 python sql pyodbc

我的机器上有一个名为"Test"的本地数据库,其中包含一个名为"Tags"的表.我能够通过SQL Server管理工作室2008从该表访问此数据库和查询.

但是,当使用pyodbc时,我一直遇到问题.

使用这个:

conn = pyodbc.connect('DRIVER={SQL Server};SERVER=localhost:1433;DATABASE=Test')
Run Code Online (Sandbox Code Playgroud)

产生错误:

pyodbc.Error: ('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]Invalid connection. (14) (SQLDriverConnectW); [01000] [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Invalid Instance()). (14)')
Run Code Online (Sandbox Code Playgroud)

(有或没有指定端口)

尝试替代连接字符串:

conn = pyodbc.connect('DRIVER={SQL Server};SERVER=localhost\Test,1433')
Run Code Online (Sandbox Code Playgroud)

没有产生错误,但是:

cur = conn.cursor()
cur.execute("SELECT * FROM Tags")
Run Code Online (Sandbox Code Playgroud)

产生错误:

pyodbc.ProgrammingError: ('42S02', "[42S02] [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'Tags'. (208) (SQLExecDirectW)")
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

小智 5

我尝试将您的查询更改为

SELECT * FROM Test.dbo.Tags
Run Code Online (Sandbox Code Playgroud)

它起作用了.


Bry*_*yan 3

我在您的连接字符串中没有看到任何身份验证属性。试试这个(我使用的是 Windows 身份验证):

conn = pyodbc.connect('Trusted_Connection=yes', driver = '{SQL Server}',
                      server = 'localhost', database = 'Test')
cursor = conn.cursor()
# assuming that Tags table is in dbo schema
cursor.execute("SELECT * FROM dbo.Tags")
Run Code Online (Sandbox Code Playgroud)