我會使用Python,也是被逼的。當初要交程式報告時,實在是搞不懂要怎麼去get及put網頁資料。看過java及C,直覺並不是我可以在一個假日就完成這樣工作的。因為之前稍稍有看過Python的網頁,它的語法和basic,pascal或Matlab都蠻像的,而且可以查得到網頁相關的功能。
這幾年都接了單位的"品質"精進作業。每年都要想一個品質專案,因為有些事是不得搬上抬面的,所以大家都做些顯而易見,不傷大雅的議題。今年我特別抄去年的專案,只是用 Python寫好電子化的處理方案。在用Python處理時,遇見資料庫讀寫的問題,因為實在太少資料了,所以拿上來分享一下。
先說我的狀況:就是要去開一個已有的.mdb檔,讀出裏面的資料,再上傳到單位的網頁中。為了讀database檔,Python簡單解決方案為使用pyodbc,或是使用pypyodbc。兩者都可以讀一些主流的sql server,以及Microsoft excel和access的存檔。兩者的差異只有pypyodbc是純python的程式碼實作出來的。打開.mdb檔的方式如下:
###打開.mdb檔的方式 conn = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:\\dir\\file.mdb') cursor = conn.cursor() cursor.execute('select * from ProgressNote;') ###
基本上用最後一行的cursor.execute,就可以使用類似sql的語法來截取所需要的資料。
但是,pyodbc對其他語言的支援實在是不好,光utf-8,就不太work了。像下述程式碼:
### http://www.g2w.me/2012/06/python-pyodbc-access-mdb-in-linux/對中文字元的建議 # cursor.execute('select * from "省"')
原網頁的作者有交待,必須放置於""""中,但是我用下述程式碼:
### 我想像中的程式碼: # cursor.execute('SELECT * FROM ProgressNote WHERE "病歷號"=?','12345678') #
卻很明顯,必需要存成ansi才可以work,如果存成UTF-8,很抱歉,就無法work。所以在我全部是存UTF-8的環境下,是無解的。
只能說,非常的讚同網友寫的下面這句話:
"pyodbc 是个很不错的库,api 也很好用,不过对中文支持的并不好,它并没有默认以 unicode 处理数据,所以对于中文相关的应用,编码问题无处不在,只得慢慢折腾了。"
3 則留言:
要不要考慮使用 MS 提供的 ADODB 元件來操作
Access, 我覺得資料庫中欄位/Table 名稱用中文很怪也....附上參考網頁
http://www.alarmchang.com/wiki/index.php?title=ADO_command_%E7%AF%84%E4%BE%8B_%E9%80%A3%E6%8E%A5Offic_Access
要不要使用 微軟提供的元件 ADODB 來存取 Access , MS 對於中文的支援還蠻不錯的
下面有範例
http://www.alarmchang.com/wiki/index.php?title=ADO_command_%E7%AF%84%E4%BE%8B_%E9%80%A3%E6%8E%A5Offic_Access
感謝!
等我最近三個報告結束,再來研究看看
張貼留言