【问题标题】:What do I need to read Microsoft Access databases using Python?使用 Python 读取 Microsoft Access 数据库需要什么?
【发布时间】:2021-09-20 19:29:36
【问题描述】:

如何在 Python 中访问 Microsoft Access 数据库?使用 SQL?

我更喜欢适用于 Linux 的解决方案,但我也可以适应 Windows。

我只需要读取权限。

【问题讨论】:

    标签: python linux ms-access python-module


    【解决方案1】:

    在 Linux 上,MDBTools 是您目前唯一的机会。 [disputed]

    在 Windows 上,您可以使用 pypyodbc 处理 mdb 文件。

    创建 Access mdb 文件:

    import pypyodbc
    pypyodbc.win_create_mdb( "D:\\Your_MDB_file_path.mdb" )
    

    Here is an Hello World script 完全演示了 pypyodbc 的 Access 支持功能。

    免责声明:我是 pypyodbc 的开发者。

    【讨论】:

    • 根据你的主页it runs on linux.
    • mdb create 和 compact 函数只能在 windows 上运行,因为它是 ODBC 接口函数,它是跨平台的。
    • “在 Linux 上,MDBTools 是你目前唯一的机会。” - 这不再是真的。 Jython 和 UCanAccess JDBC 驱动程序是 Linux(和 Mac OS,我假设)下的可行替代方案。详情在另一个问题here
    【解决方案2】:

    我已使用 PYODBC 成功连接到 MS Access 数据库 - 在 Windows 上。安装很简单,使用也很简单,你只需要设置正确的连接字符串(MS Access 的连接在列表中),然后你就可以使用示例了。

    【讨论】:

    【解决方案3】:

    pyodbc 怎么样? This SO question 演示了使用它可以读取 MS Access。

    【讨论】:

      【解决方案4】:

      您已经找到了一些听起来不错的解决方案。另一个可能比您想要的更接近“金属”的是 MDB Tools。

      MDB Tools 是一组开源库和实用程序,用于在不使用 Microsoft DLL 的情况下方便地从 MS Access 数据库(mdb 文件)导出数据。因此非 Windows 操作系统可以读取数据。或者,换句话说,他们正在对 MDB 文件的布局进行逆向工程。

      另外请注意,我怀疑他们是否已经开始处理 ACCDB 文件,并且可能不会有太多对该功能的要求。

      【讨论】:

      • 实际上列出的其他解决方案都不能在 Linux 上运行(除非您想花 800 美元购买商业驱动程序)。 MDB 工具可能“接近金属”,但它包含一个 unixODBC 驱动程序,可以使用 pyodbc onLinux 读取 Access db。谢谢你拯救了我的一天!
      • 一个很棒的小程序!不过,很难找到各个实用程序的名称/文档,因此供参考:Linux 用户可以使用man mdb-,然后使用 tab 来获取自动完成列表;并且大家可以看到this Github repository中的txt文件。
      【解决方案5】:

      在 Ubuntu 12.04 上,这是我为使其正常工作所做的。

      安装pyodbc:

      $ sudo apt-get install python-pyodbc
      

      安装一些额外的驱动程序:

      $ sudo apt-get install mdbtools libmdbodbc1
      

      制作一个连接数据库并显示所有表格的小测试程序:

      import os
      import pyodbc
      
      db_path = os.path.join("path", "toyour", "db.mdb")
      odbc_connection_str = 'DRIVER={MDBTools};DBQ=%s;' % (db_path)
      connection = pyodbc.connect(odbc_connection_str)
      cursor = connection.cursor()
      
      query = "SELECT * FROM MSysObjects WHERE Type=1 AND Flags=0"
      cursor.execute(query)
      rows = cursor.fetchall()
      for row in rows:
          print row
      

      希望对你有帮助。

      【讨论】:

      • 我相信libmdbodbc1 现在已替换为odbc-mdbtool。至少这就是我在 Ubuntu 18.04 上的工作。
      • @MartinThøgersen 我相信它被称为odbc-mdbtools(s at end)
      【解决方案6】:

      老问题,但我想我会为 Windows 发布一个 pypyodbc 替代建议:ADO。事实证明,使用现代(与老式 ODBC)驱动程序通过 COM 访问 Access 数据库、Excel 电子表格和其他任何东西真的很容易。

      查看以下文章:

      【讨论】:

        【解决方案7】:

        将 Access 数据库作为 pandas 数据框读取 (Windows)。

        这是一个非常快速和简单的解决方案,我已成功地将其用于小型数据库。

        您可以通过永久链接到 Excel 并保存该文件来读取 Access 数据库(需要点击几下),链接在这里:

        https://support.office.com/en-gb/article/Connect-an-Access-database-to-your-workbook-a3d6500c-4bec-40ce-8cdf-fb4edb723525

        然后,您可以将该 Excel 文件作为 pandas 数据框读取。

        因此,例如,将链接的 Excel 文件另存为“link_to_master.xlsx”,位于 \FileStore\subfolder1\subfolder 位置。

        在 python 中运行以下命令:

        import pandas as pd
        import os
        os.chdir('\\\\FileStore\\subfolder1\\subfolder') #sets the folder location
        df = pd.read_excel('link_to_master.xlsx') # reads the Excel file
        df
        

        如果您重新访问您的 python 脚本,请考虑链接刷新的频率。即 Excel 和 Access 之间的链接是静态的。

        【讨论】:

          【解决方案8】:

          就个人而言,即使经过多次尝试,我也无法让 MDB 工具(以及相关的 ODBC 工具,如 unixODBC)在 Linux 下与 Python 或 PHP 一起正常工作。我刚刚尝试了这个问题here 的另一个答案中的说明,我得到的只是“分段错误(核心转储)”。

          但是,我确实获得了UCanAccess JDBC 驱动程序,以便在 Linux 上从 Jython 或 CPython+JayDeBeApi 读取 .mdb 和 .accdb 文件。有关如何在 Ubuntu 14.04 LTS 下设置的详细说明,请参阅我的其他答案 here

          【讨论】:

            【解决方案9】:

            很可能,您会想要使用像SQLAlchemy 这样的好框架来访问您的数据,或者至少,我会推荐它。 Support for Access 是“实验性的”,但我记得使用它没有太多问题。它本身在后台使用pyodbc 连接到Access dbs,因此它应该可以在windows、linux、os x 和诸如此类的环境下工作。

            【讨论】:

            • 我只需要它来将数据导入到我的 SQLite 支持的 Storm 模型中。 :)
            • SQLAlchemy + MS Access 不适用于 SQLAlchemy 0.5+,因为它的代码尚未更新。
            • 那个使用odbc,首先没有解决访问物理数据库文件的问题。
            【解决方案10】:

            如果您使用EQL Data 将您的数据库同步到网络,那么您可以使用 JSON 或 YAML 查询您的 Access 表的内容:http://eqldata.com/kb/1002

            那篇文章是关于 PHP 的,但它在 Python 中也同样适用。

            【讨论】:

              【解决方案11】:

              如果您有空闲时间,可以尝试修复和更新这个通过本机 COM32 客户端 API 读取 MS-Access DB 的 python 类:Extraction and manipulation class for Microsoft Access

              【讨论】:

                【解决方案12】:

                我在 Windows 下将 Python 连接到 MS Access 的方式是使用这种方式:Connect to MS Access with Python。 或许你在Win 7上能找到一些麻烦,所以我找到了解决办法:Solving a connection between MS Access and Python on Windows 7

                我没试过在Linux下连接!

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-07-16
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多