【问题标题】:Building an MS Access database using python使用 python 构建 MS Access 数据库
【发布时间】:2011-08-18 23:32:19
【问题描述】:

我计划投标的一个项目的主要目标是使用 python 创建一个 Microsoft Access 数据库。主数据库后端将是 postgres,但计划是导出 Access 图像。

这将是一个网络应用程序,它将接受用户的输入并通过一个黑盒并将结果作为访问数据库输出。 Web 应用程序将构建在 linux 服务器上。

我有几个相关的问题:

  • 是否有可靠的库或模块可以使用?
  • 您在使用 Access 和 python 方面有何经验?
  • 我需要了解的任何提示、技巧或必须避免的事项?

谢谢:)

【问题讨论】:

  • 如果安装了 Access,您可以使用 Python for Windows 扩展从 Python 自动化它:sourceforge.net/projects/pywin32
  • @HansUp - 不,它不会被安装,因为网络应用程序将在 linux 服务器上运行
  • 这是一个非常难的问题。 IIRC 甚至 Access 都无法正确读取或写入访问数据库;-) .... 他们关于向后兼容性的历史几乎是一场噩梦。

标签: python linux ms-access


【解决方案1】:

http://adodb.sourceforge.net/ - 安装在 linux 上,用 php 或 python 编写,连接到 Access 和 PostgreSQL。

我们已经使用它多年了,效果很好。

【讨论】:

  • 因此,如果我有一个“模板”ms 访问数据库,那么它应该可以完美运行,只需进行少量编辑/更改?
【解决方案2】:

嗯,在我看来,您需要在运行 windows 的 linux 机器上复制一份 vmware 服务器,在 vm 中写入一个 Web 服务以进行访问,以及从主 linux 机器与其通信。您不会找到在 Linux 上创建访问数据库的方法。将其称为要求并不能使其在技术上成为可能。

【讨论】:

  • 在 linux 上一切皆有可能 ;)
【解决方案3】:

您可以使用 MS 的 officedata 命名空间导出到 XML。访问应该不会有任何问题。您可以提供单独的 xsd 架构,或直接在文档树中编码类型和关系。这是一个简单的例子:

<?xml version="1.0" encoding="UTF-8"?>
<dataroot xmlns="urn:schemas-microsoft-com:officedata">

<Table1><Foo>0.00</Foo><Bar>2011-05-11T00:00:00.000</Bar></Table1>
<Table1><Foo>3.00</Foo><Bar>2011-05-07T00:00:00.000</Bar></Table1>

<Table2><Baz>Hello</Baz><Quux>Kitty</Quux></Table2>
</dataroot>

谷歌搜索“urn:schemas-microsoft-com:officedata”应该会找到一些有用的结果。

【讨论】:

    【解决方案4】:

    如果你足够了解这一点:

    • Python、它的数据库模块和 ODBC 配置

    那么你应该知道怎么做:

    • 打开一个数据库,读取一些数据,将其插入到另一个数据库中

    如果是这样,那么您非常接近所需的解决方案。诀窍是,您可以将 MDB 文件作为 ODBC 数据源打开。现在:我不确定你是否可以在 MDB 文件中使用 ODBC“创建表”,所以让我提出这个秘诀:

    1. 创建一个名为“TARGET.MDB”的 MDB 文件——包含必要的表格、表格、报告等。(放入一些虚拟数据并测试它是否是客户想要的。)
    2. 为文件“TARGET.MDB”设置一个 ODBC 数据源。测试以确保您可以读/写。
    3. 删除所有的虚拟数据——但保留表定义不变。重命名文件“TEMPLATE.MDB”。
    4. 当您需要生成新的 MDB 文件时:使用 Python 复制 TEMPLATE.MDB 到 TARGET.MDB。
    5. 打开数据源以写入 TARGET.MDB。创建/复制所需的记录。
    6. 关闭数据源,将 TARGET.MDB 重命名为 TODAYS_REPORT.MDB... 或任何对这个特定数据导出有意义的东西。

    这对你有用吗?

    几乎可以肯定,在 Windows 上完成这一切会更容易,因为对 ODBC 的支持将得到最广泛的支持。但是,我认为原则上您可以在 Linux 上执行此操作,前提是您找到正确的 ODBC 组件以通过 ODBC 访问 MDB。

    【讨论】:

    • 谁给了你一对相互矛盾的要求,即输出必须是 Jet/ACE MDB 并且必须在 Linux 机器上进行创建?这简直是​​精神错乱。
    • @David-W-Fenton:那是你的客户 :)
    • 我解雇那些不让我做他们付钱给我的工作的客户。
    【解决方案5】:

    你能改用 sqlite 数据库吗?

    编辑:

    如果它必须在 linux 上并且必须在 MS Access 上,那么我很确定 this is your only choice,但它需要 1,550 美元。

    您要么必须花钱,要么说服客户更改其他两个参数之一。就个人而言,我会推动将数据库文件更改为 sqlite。

    当然,您始终可以编写自己的数据库驱动程序,但花 1,550 美元可能值得花时间。 mdbtools 多年来一直致力于此,但该项目几乎已被放弃。

    找到了,有点

    好的,所以我就是放不下这个,发现有一个名为Jackcess 的java 库可以在任何可以运行jvm 的平台上写入MS Access mdb 文件。当然,它是 java 而不是 python,但也许你可以学习足够的 java 来将应用程序放在一起并从 python 执行它?或者只是将整个应用程序切换到 java,无论如何。

    【讨论】:

    • 严格来说,应用程序的输出必须是一个 MS Access MDB 文件。
    • 我以为你会这么说。
    • 感谢您的建议。我已经 8 年没有接触过 java 了,但我确信我可以选择足够多的东西来将它作为我可以从 python 中运行的 api 运行
    • 好的,你有 Jackcess,所以在 Linux 上支持 MS Access 文件似乎已经解决了。但是仍然存在问题,它是在 Java 中,但代码必须是在 Python 中。 Jython 不是这里的解决方案吗?如果不是,为什么?
    • Python 中的 Java:您可以使用 Python 模块 jpype 用您的 jackess jar 调用 MSAccess 来实例化 JVM。
    【解决方案6】:

    能否创建一个自解压文件发送给安装了 Microsoft Access 的 Windows 用户?

    1. 包含一个空白的 .mdb 文件。
    2. 动态构建带有表、架构的xml文档 和数据
    3. 包括一个导入可执行文件 所有 xml 文档并导入 Access .mdb 文件。

    这对用户来说是一个额外的步骤,但您可以依赖他们现有的驱动程序、软件和桌面。

    【讨论】:

    • 我希望,正如我之前所说,输出必须是 mdb 应用程序。
    【解决方案7】:

    对重复问题的各种答案表明,您无法实现在 linux 服务器上创建 MS Access 数据库的“主要目标”。

    当然,这样的目标本身是不值得的。如果您告诉我们 Access db 的用户/消费者应该用它做什么,也许我们可以帮助您。可能性:(1)创建一个脚本和一个(一组)文件,用户下载并运行这些文件以创建一个 Access DB(2)如果它只是用于临时用户检查/操作,Excel 文件可能会这样做。

    【讨论】:

    • 严格来说,应用程序的输出必须是一个 MS Access MDB 文件。
    • 目标似乎可以通过使用 Jython/Jackcess、Python 和 java/Jackcess 转换器或 Jackcess 的 python 端口来实现。不过,这无疑会很痛苦。或者支付 1500 并使用 unixODBC(可能比开发内部 iwth Jackcess 便宜)
    【解决方案8】:

    我建议 moving 将数据导入 Microsoft SQL 数据库,然后将 linking or importing 数据访问。

    【讨论】:

    • 项目的核心需求是输出一个msaccess db。他们用于托管的服务器是 linux
    • 而且后端可以是我想要的任何东西,输出必须存储在Access MDB中
    猜你喜欢
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多