2011-05-05 91 views
7

我打算投標的項目的主要目標涉及使用python創建Microsoft Access數據庫。主數據庫後端將是postgres,但計劃是導出Access圖像。使用python構建MS Access數據庫

這將是一個Web應用程序,它將從用戶處獲得輸入,並通過黑盒並將結果作爲訪問數據庫輸出。網絡應用程序將建立在Linux服務器上。

我有幾個相關的問題:

  • 是否有可以使用可靠的庫或模塊?
  • 你有什麼經驗使用Access和python?
  • 任何提示,技巧,或必須避免我需要知道?

謝謝:)

+0

如果安裝了Access,您可以使用Python for Windows自動從Python進行自動化擴展:http://sourceforge.net/projects/pywin32/ – HansUp 2011-05-05 00:40:40

+0

@HansUp - 不會安裝它,因爲Web應用程序將繼續linux服務器 – dassouki 2011-05-05 00:42:47

+0

重複http://stackoverflow.com/questions/256459/populate-a-ms-access-database-in-linux – abbot 2011-05-05 06:28:37

回答

4

你可以使用sqlite數據庫嗎?

編輯:

如果它必須是在Linux和它必須是到MS Access,那麼我敢肯定this is your only choice,但它的成本$ 1,550。

您將不得不掏錢,或說服客戶改變其他兩個參數之一。就個人而言,我會推動將數據庫文件更改爲sqlite。

當然,你可以隨時編寫自己的數據庫驅動程序,但它可能是值得花時間1550美元。多年來,mdbtools一直在努力,這個項目已經被放棄了。

發現,還挺

好了,我不能讓這個去,發現有一個叫Jackcess一個Java庫,會寫到MS Access MDB文件,可以運行在任何平臺上JVM。當然,它是java而不是python,但是也許你可以學習足夠的java來將應用程序放在一起並從python執行它?或者只是將整個應用程序切換到Java,無論如何。

+0

嚴格來說,輸出到應用程序**必須**是MS Access MDB文件。 – dassouki 2011-05-10 17:36:20

+0

我以爲你會這麼說。 – James 2011-05-10 21:04:17

+0

感謝您的建議。我現在8年沒有碰到過java,但我確信我可以挑選足夠的能夠運行它作爲一個API,我可以從Python – dassouki 2011-05-11 01:25:27

0

我建議moving數據到Microsoft SQL數據庫,然後linking or importing的數據訪問。

+0

該項目的核心要求是輸出一個msaccess數據庫。他們要託管的服務器是linux – dassouki 2011-05-08 01:15:49

+0

而後端可以是我想要的任何內容,輸出必須存儲在Access MDB中 – dassouki 2011-05-11 01:24:55

2

重複問題的各種答案表明,您在Linux服務器上創建MS Access數據庫的「主要目標」是無法實現的。

當然,這樣的目標本身並不值得。如果你告訴我們什麼Access數據庫的用戶/消費者預計與它,也許我們可以幫助你。可能性:(1)創建一個用戶下載並運行的腳本和(一組)文件,以創建一個Access DB(2),如果它只是用於臨時用戶檢查/操作,則可以使用Excel文件。

+0

嚴格地說,輸出到應用程序**必須**是MS Access MDB文件。 – dassouki 2011-05-10 17:36:12

+0

目標似乎可以通過使用Jython/Jackcess,Python和java/jackcess轉換器,或者使用Jackcess的python端口來實現。這無疑將是一個痛苦。或者支付1500,並使用unixODBC(可能比開發內部智力資源便宜) – extraneon 2011-05-14 19:21:07

0

您可以創建一個自解壓文件發送給安裝了Microsoft Access的Windows用戶嗎?

  1. 包含一個空白的.mdb文件。
  2. 動態地建立了桌子,架構 和數據的XML文檔
  3. 包括進口可執行文件,將採取 所有的XML文檔,並導入到 訪問.mdb文件。

這對用戶來說是一個額外的步驟,但是您可以依靠他們現有的驅動程序,軟件和桌面。

+0

我希望,如前所述,輸出必須是mdb應用程序。 – dassouki 2011-05-10 19:02:16

2

如果你知道這不夠好:

  • 的Python,它的數據庫模塊,並配置ODBC

那麼你應該知道如何做到這一點:

  • 打開數據庫,讀取一些數據,將其插入到不同的數據庫中

如果是這樣,那麼你非常接近你所需的解決方案。訣竅是,您可以打開一個MDB文件作爲ODBC數據源。現在:我不知道,如果你能在一個MDB文件「創建表」使用ODBC,所以讓我提出這個食譜:

  1. 創建名爲「TARGET.MDB」一個MDB文件 - 必要表格,表格,報告等(將一些虛擬數據放入並測試它是客戶想要的。)
  2. 將ODBC數據源設置爲文件「TARGET.MDB」。測試以確保您可以讀取/寫入。
  3. 刪除所有的虛擬數據 - 但保持表格完好無損。重命名文件「TEMPLATE.MDB」。
  4. 當您需要生成一個新的MDB文件時:使用Python TEMPLATE.MDB複製到TARGET.MDB。
  5. 打開要寫入TARGET.MDB的數據源。創建/複製所需的記錄。
  6. 關閉數據源,將TARGET.MDB重命名爲TODAYS_REPORT.MDB ...或者對這個特定的數據導出有意義。

會爲你工作嗎?

由於對ODBC的支持將得到最廣泛的應用,因此在Windows上這樣做幾乎肯定會更容易。不過,我認爲原則上你可以在Linux上這樣做,只要你找到正確的ODBC組件來通過ODBC訪問MDB。

+0

誰給了你一對互相矛盾的要求,輸出必須是Jet/ACE MDB,並且創建必須發生在Linux機器上?那簡直是瘋狂。 – 2011-05-12 01:27:15

+0

@ David-W-Fenton:那就是你的客戶:) – extraneon 2011-05-14 19:22:45

+0

我解僱了那些不讓我做他們支付我工作的客戶。 – 2011-05-18 21:34:52

1

您可以使用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> 

谷歌搜索「甕:架構 - 微軟COM:officedata」應該把一些有用的結果。

0

好吧,在我看來,你需要在運行windows的linux系統上運行vmware服務器,在vm中寫入訪問的web服務,以及從主linux框中與之通信。你不會在Linux上找到創建訪問數據庫的手段。把它稱爲一項要求不會使其技術上成爲可能。

+0

任何事情都可能在Linux上;) – James 2011-05-12 03:15:43

0

http://adodb.sourceforge.net/ - 安裝在Linux上,用php或python編寫,連接到Access和PostgreSQL。

我們已經使用了它多年,它的工作原理非常漂亮。

+0

因此,如果我有一個「模板」毫秒訪問數據庫,它應該工作完美,然後進行小編輯/更改? – dassouki 2011-05-14 19:00:46