【问题标题】:Old Access Files and PYODBC旧访问文件和 PYODBC
【发布时间】:2021-12-23 06:50:25
【问题描述】:

我有很多旧的 Access 文件 (*.mdb) 是在 2010 之前的某个版本的 Access 中创建的。我无法使用 Access 2019 或 OBDC 数据源 x64 中通常引用的 64 位驱动程序打开它们Stack Overflow 上的 PYODBC 问题和答案。

问题是,“当您尝试使用标准{Microsoft Access Driver (*.mdb, *.accdb)} 驱动程序使用 PYODBC 打开 Access 文件时收到以下错误,您会怎么做?”

错误信息:

[ODBC Microsoft Access 驱动程序] 无法打开使用以前版本的应用程序创建的数据库。 (-1019)")

如果您尝试使用 Access 2019 打开旧的 Access 数据文件,您将收到非常相似的消息。

【问题讨论】:

    标签: python-3.x pandas ms-access pyodbc 32-bit


    【解决方案1】:

    简介

    有几个步骤可以解决这个问题。

    1. 检查是否安装了 Access 的 32 位驱动程序 如果没有,请使用 Microsoft Access Database Engine 2010 Redistributable (https://www.microsoft.com/en-us/download/details.aspx?id=13255) 从 Microsoft 安装它们
    2. 使用 32 位 Python 设置虚拟环境
    3. 选择合适的驱动程序

    1.检查 32 位驱动程序

    在 Windows 搜索栏中搜索 ODBC 并打开 32 位版本。如果您有Driver do Microsoft Access (*.mdb),那么您已完成此步骤。

    如果您没有看到此驱动程序,则需要使用上面的链接从 Microsoft 下载驱动程序。

    2。设置 32 位 Python 这假设您已经安装了 Anaconda。您需要使用执行工作所需的库创建一个 32 位 Python 虚拟环境。这是我在旧访问文件中使用 PYODBC 和 Pandas 所做的。 参考:https://titanwolf.org/Network/Articles/Article?AID=25933ee7-9343-4045-ab83-74ebae601b92

    $ set CONDA_SUBDIR=win-32
    
    $ conda create -n py36_32bit python=3.6.5 pandas PYODBC openpyxl spyder
    
    $ conda activate py36_32bit
    
    $ python
    
    Python 3.6.8 |Anaconda, Inc.| 
    
    (default, Feb 21 2019, 18:28:22) [MSC v.1916 32 bit (Intel)] on win32
    

    3.选择合适的驱动程序 在新的 32 位环境中打开 Spyder 并开始编码。这是一个如何连接旧数据库文件的示例。

        path_to_access = r"full\path\to\file.mdb"
        ###Create the connection string with the 32 bit driver
        connStr = (r"Driver={Driver do Microsoft Access (*.mdb)};"
        r"DBQ="+path_to_access+";")
        ### Connect to the database
        cnxn = pyodbc.connect(connStr)
        cursor = cnxn.cursor()
        ### Print out the table names in the database.
        for table_info in cursor.tables(tableType='TABLE'):
             print(f'Table: {table_info.table_name}')
        ### Close the connection to the file. 
        cursor.close()
        cnxn.close()
    

    对于其他参考资料,我强烈推荐这个关于与旧访问文件交互的页面。 Pandas 还有一个很好的工具,可以使用 pandas.read_sql() 读取 Access 数据库。

    旧访问文件参考: https://www.barenakedcoder.com/blog/2020/04/python-and-microsoft-access-files/

    【讨论】:

      猜你喜欢
      • 2015-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多