【问题标题】:pyodbc connection error when trying to connect to DB on localhost尝试连接到本地主机上的数据库时出现 pyodbc 连接错误
【发布时间】:2011-10-02 16:24:02
【问题描述】:

我的机器上有一个名为“Test”的本地数据库,其中包含一个名为“Tags”的表。我可以通过 SQL Server management studio 2008 访问这个数据库并从这个表中查询。

但是,在使用 pyodbc 时,我一直遇到问题。

使用这个:

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

产生错误:

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)')

(指定或不指定端口)

尝试替代连接字符串:

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

不会产生错误,但是:

cur = conn.cursor()
cur.execute("SELECT * FROM Tags")

产生错误:

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

为什么会这样?

【问题讨论】:

  • 你还尝试过哪些其他组合?
  • 好吧,我从外部服务器复制了这个数据库,当我尝试连接到该服务器时,这个连接字符串(没有端口规范)起作用了。即,“DRIVER={SQL Server};SERVER=DB-TEST-SRV;DATABASE=Test”没有产生错误,并且以我上面指定的方式查询产生了没有错误的预期结果。

标签: python sql pyodbc


【解决方案1】:

我尝试将您的查询更改为

SELECT * FROM Test.dbo.Tags

它成功了。

【讨论】:

    【解决方案2】:

    我在您的连接字符串中看不到任何身份验证属性。试试这个(我正在使用 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")
    

    【讨论】:

      【解决方案3】:

      对我来说,除了维护连接细节(用户、服务器、驱动程序、正确的表名等),

      我采取了以下步骤:

      1. 在此处检查 ODBC 版本 (Windows 10) ->
      2. (搜索)ODBC ->
      3. 选择 32/64 位版本 ->
      4. 驱动程序->
      5. 验证那里存在 ODBC 驱动程序版本。如果不是,请使用此链接下载相关驱动:here

      参考链接:here

      【讨论】:

        【解决方案4】:

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

        这个连接缺少实例名,端口不应该这样写。

        我的连接是这样的:

        cn=pyodbc.connect('DRIVER={SQL Server};SERVER=localhost\SQLEXPRESS;PORT=1433;DATABASE=ybdb;UID=sa;PWD=*****')
        

        enter image description here

        【讨论】:

          【解决方案5】:

          尝试将 'localhost' 替换为 '(local)' 或 '.'。这个解决方案为我解决了这个问题。

          【讨论】:

            猜你喜欢
            • 2017-11-22
            • 2019-06-06
            • 1970-01-01
            • 2013-07-08
            • 2020-01-20
            • 1970-01-01
            • 2014-06-10
            • 2018-07-30
            • 1970-01-01
            相关资源
            最近更新 更多