【问题标题】:python - connecting to a database with pyodbc - not workingpython - 使用pyodbc连接到数据库 - 不工作
【发布时间】:2011-06-24 14:51:27
【问题描述】:

我正在尝试使用以下连接字符串连接到 Access 2007 数据库。

conn = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=<C:\Users\JSeinfeld\Desktop\Backup databases\Database_6.7.accdb>;")

我收到此错误:

回溯(最近一次通话最后一次):
文件“”,第 1 行,在 conn = pyodbc.connect("驱动程序={微软 访问驱动程序 (*.mdb, *.accdb)};DBQ=;")

错误: ('HY000', "[HY000] [微软][ODBC微软访问 驱动程序]一般错误无法打开 注册表项 临时(易失性)Ace 进程 0x167c 线程 0x1568 的 DSN DBC 0x1c67a5c

喷气机'。 (63) (SQLDriverConnectW); [HY000] [微软][ODBC微软 访问驱动程序]一般错误无法 打开注册表项临时(易失性) 进程 0x167c 线程的 Ace DSN 0x1568 DBC 0x1c67a5c

喷气机'。 (63); [HY000] [微软][ODBC Microsoft Access 驱动程序] 无效 文件名。 (-1044); [HY000] [微软][ODBC微软访问 驱动程序]一般错误无法打开 注册表项 临时(易失性)Ace 进程 0x167c 线程 0x1568 的 DSN DBC 0x1c67a5c

喷气机'。 (63); [HY000] [微软][ODBC Microsoft Access 驱动程序]一般错误 无法打开注册表项临时 (易失性)进程 0x167c 的 Ace DSN 线程 0x1568 DBC 0x1c67a5c

喷气机'。 (63); [HY000] [微软][ODBC Microsoft Access 驱动程序] 无效 文件名。 (-1044)")

在 SO 上还有另一个类似的问题,但是我没有遇到 32/64 位兼容性问题。这个问题似乎没有一个好的答案,但希望有人可以帮助我连接到我的数据库,因为我不知道有任何其他方法可以使用 python 查询或将数据写入 Access 2007。

谢谢

【问题讨论】:

    标签: python database pyodbc


    【解决方案1】:

    遇到了同样的问题 - 这是一个简单的情况,即转义访问数据库位置中使用的反斜杠

    >>> conn = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\\access\\site_be.accdb;")

    工作的时候

    >>> conn = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\access\site_be.accdb;")

    给了我错误 Jet'. (63); [HY000] [Microsoft][ODBC Microsoft Access Driver] Not a valid file name. (-1044)")

    希望对您有所帮助..

    【讨论】:

      【解决方案2】:

      尝试从文件名中去掉括号。

      conn = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\Users\JSeinfeld\Desktop\Backup databases\Database_6.7.accdb")
      

      【讨论】:

      • 嘿斯蒂芬,我要到星期一才能测试这个,但我希望它是那么简单:) +1 不过,这对我来说很有意义。
      【解决方案3】:

      您的文件夹中有 *.ldb 文件吗?

      我收到了非常相似的错误消息,但我的还包括“文件已在使用中”。就我而言,我终于意识到数据库上有一个锁(.mdb 旁边的一个 .ldb 文件)。我有一个一直使用数据库的服务正在运行——我想是时候切换到多用户数据库引擎了。

      作为实验,我做了一个数据库的副本,pyodbc连接到副本就好了。这显然不是一个长期的解决方案,但至少现在我知道问题所在了。

      【讨论】:

        【解决方案4】:

        Fabiolus 做对了。

        反斜杠字符表示下一个字符在字符串中具有特殊含义。所以破译双反斜杠......第一个反斜杠告诉python准备一个特殊的字符串字符,第二个反斜杠是特殊的字符串字符(在这种情况下是一个反斜杠)

        \n = newline
        \t = tab
        \\ = backslash
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-02
          • 2022-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多