使用python建立MS Access数据库

8 人关注

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

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

我有几个相关的问题。

  • Is there a reliable library or module that can be used?
  • What has your experience been using Access and python?
  • Any tips, tricks, or must avoids I need to know about?
  • 谢谢 :)

    4 个评论
    如果安装了Access,你可以使用Python for Windows扩展从Python中实现自动化。 sourceforge.net/projects/pywin32
    @HansUp - 不,它不会被安装,因为网络应用将在一个Linux服务器上。
    6502
    这是一个非常困难的问题。我记得连Access都不能正确读写Access数据库;-).... 他们关于向后兼容性的历史接近于一场噩梦。
    python
    linux
    ms-access
    dassouki
    dassouki
    发布于 2011-05-05
    8 个回答
    James
    James
    发布于 2011-05-14
    已采纳
    0 人赞同

    你能不能用一个sqlite数据库来代替?

    edit:

    如果一定要在linux上,而且一定要在MS Access上,那么我很确定 this is your only choice , but it costs $1,550.

    你要么拿出钱来,要么说服客户改变另外两个参数中的一个。 就个人而言,我会推动将数据库文件改为sqlite。

    当然,你总是可以编码你自己的数据库驱动程序,但这可能值得花时间掏出1550美元。

    发现它,有点

    好的,所以我不能放过这个机会,我发现有一个java库,叫做 呼叫中心 它可以在任何可以运行jvm的平台上写到MS Access mdb文件。 当然,这是java而不是python,但也许你可以学习足够多的java,然后在python上执行一个应用程序? 或者干脆把整个应用程序换成java,等等。

    严格来说,对应用程序的输出 must 是一个MS Access MDB文件。
    我以为你会这么说。
    谢谢你的建议。我已经8年没有碰过java了,但我相信我可以挑出足够的东西来作为一个api运行,我可以从python上运行它。
    好吧,你有Jackcess,所以在Linux上支持MS Access文件似乎已经解决了。但仍然存在的问题是,它是用Java编写的,但代码必须是Python的。是不是 Jython 这里有解决方案吗?如果没有,为什么?
    Python中的Java :你可以使用Python模块 jpype ,用你的jackess jar实例化一个JVM,调用MSAccess。
    John Machin
    John Machin
    发布于 2011-05-14
    0 人赞同

    对重复问题的各种回答表明,你在linux服务器上创建MS Access数据库的 "主要目标 "是不可能实现的。

    当然,这样的目标本身是完全不值得的。如果你告诉我们Access db的用户/消费者希望得到什么 do 也许我们可以帮助你。可能性:(1)创建一个脚本和一个(一组)文件,让用户下载并运行以创建一个Access数据库(2)如果只是为了让用户随意检查/操作,一个Excel文件就可以了。

    严格来说,对应用程序的输出 must 是一个MS Access MDB文件。
    通过使用Jython/Jackcess、Python和java/Jackcess转换器,或者将Jackcess移植到Python中,似乎可以实现这一目标。但这无疑是一种痛苦。或者支付1500美元,使用unixODBC(可能比用Jackcess进行内部开发要便宜)。
    Dan H
    Dan H
    发布于 2011-05-14
    0 人赞同

    If you know this well enough:

  • Python, it's database modules, and ODBC configuration
  • then you should know how to do this:

  • open a database, read some data, insert it in to a different database
  • 如果是这样,那么你就非常接近你所需要的解决方案了。诀窍是,你可以将MDB文件作为ODBC数据源打开。 现在。我不确定你是否可以用ODBC在MDB文件中 "创建表格",所以让我提出这个秘诀。

  • Create an MDB file with name "TARGET.MDB" -- with the necessary tables, forms, reports, etc. (Put some dummy data in and test that it is what the customer would want.)
  • Set up an ODBC datasource to the file "TARGET.MDB". Test to make sure you can read/write.
  • Remove all the dummy data -- but leave the table defs intact. Rename the file "TEMPLATE.MDB".
  • When you need to generate a new MDB file: with Python copy TEMPLATE.MDB to TARGET.MDB.
  • Open the datasource to write to TARGET.MDB. Create/copy required records.
  • Close the datasource, rename TARGET.MDB to TODAYS_REPORT.MDB... or whatever makes sense for this particular data export.
  • 这对你有好处吗?

    几乎可以肯定的是,在Windows上做这些事情会更容易,因为对ODBC的支持将是最广泛可用的。 然而,我认为原则上你可以在Linux上这样做,只要你找到合适的ODBC组件,通过ODBC访问MDB。

    谁给了你一对相互矛盾的要求,即输出必须是Jet/ACE MDB,而创建必须发生在Linux盒子上?这简直是疯了。
    @David-W-Fenton: 这是给你的客户 :)
    我解雇那些不让我做他们付给我的工作的客户。
    user474933
    user474933
    发布于 2011-05-14
    0 人赞同

    你可以使用MS的officedata命名空间导出为XML。 Access在处理这个问题时应该不会有任何问题。 你可以提供一个单独的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 "应该能找到一些有用的信息。

    Nick ODell
    Nick ODell
    发布于 2011-05-14
    0 人赞同

    I would suggest moving 将数据输入微软的SQL数据库,然后 linking or importing 要访问的数据。

    项目的核心要求是输出一个msaccess db。他们用于托管的服务器是linux
    后台可以是我想要的任何东西,输出必须存储在一个Access MDB中。
    JeffO
    JeffO
    发布于 2011-05-14
    0 人赞同

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

  • Include a blank .mdb file.
  • dynamically build xml documents with tables, schema and data
  • Include an import executable that will take all of the xml docs and import into the Access .mdb file.
  • 这对用户来说是一个额外的步骤,但你可以依靠他们现有的驱动程序、软件和桌面。

    我希望,正如我之前所说,输出必须是一个mdb应用程序。
    bmargulies
    bmargulies
    发布于 2011-05-14
    0 人赞同