|
本文實(shí)例講述了Python實(shí)現(xiàn)數(shù)據(jù)庫編程方法。分享給大家供大家參考。具體分析如下: 用PYTHON語言進(jìn)行數(shù)據(jù)庫編程, 至少有六種方法可供采用. 我在實(shí)際項(xiàng)目中采用,不但功能強(qiáng)大,而且方便快捷.以下是我在工作和學(xué)習(xí)中經(jīng)驗(yàn)總結(jié). 方法一:使用DAO (Data Access Objects) 這個(gè)第一種方法可能會(huì)比較過時(shí)啦.不過還是非常有用的. 假設(shè)你已經(jīng)安裝好了PYTHONWIN,現(xiàn)在開始跟我上路吧…… 找到工具欄上ToolsàCOM MakePy utilities,你會(huì)看到彈出一個(gè)Select Library的對話框, 在列表中選擇'Microsoft DAO 3.6 Object Library'(或者是你所有的版本). 現(xiàn)在實(shí)現(xiàn)對數(shù)據(jù)的訪問:
現(xiàn)在你有了數(shù)據(jù)庫引擎的連接,也有了數(shù)據(jù)庫對象的實(shí)例.現(xiàn)在就可以打開一個(gè)recordset了. 假設(shè)在數(shù)據(jù)庫中已經(jīng)有一個(gè)表叫做 'customers'. 為了打開這個(gè)表,對其中數(shù)據(jù)進(jìn)行處理,我們使用下面的語法:
你也可以采用DAO的execute方法. 比如這樣:
EOF 等屬性也是可以訪問的, 因此你能寫這樣的語句:
我最開始采用這個(gè)方法,感覺不錯(cuò). 方法二:使用Python DB API,Python ODBC modules(you can use ODBC API directly, but maybe it is difficult for most beginner.) 為了在Python里面也能有通用的數(shù)據(jù)庫接口,DB-SIG為我們提供了Python數(shù)據(jù)庫.(欲知詳情,訪問DB-SIG的網(wǎng)站,http://www./sigs/db-sig/). Mark Hammond的win32擴(kuò)展PythonWin里面包含了這些API的一個(gè)應(yīng)用-odbc.pyd. 這個(gè)數(shù)據(jù)庫API僅僅開放了一些有限的ODBC函數(shù)的功能(那不是它的目的),但是它使用起來很簡單,而且在win32里面是免費(fèi)的. 安裝odbc.pyd的步驟如下: 1. 安裝python軟件包: http://www./download/ 2. 安裝Mark Hammond的最新版本的python win32擴(kuò)展 - PythonWin: http://starship./crew/mhammond/ 3. 安裝必要的ODBC驅(qū)動(dòng)程序,用ODBC管理器為你的數(shù)據(jù)庫配置數(shù)據(jù)源等參數(shù) 你的應(yīng)用程序?qū)⑿枰孪葘?dǎo)入兩個(gè)模塊: dbi.dll - 支持各種各樣的SQL數(shù)據(jù)類型,例如:日期-dates 下面有一個(gè)例子:
下面是結(jié)果: 輸出(output)
大家也可以去http://www./windows/win32/odbc.html看看,那兒有兩個(gè)Hirendra Hindocha寫的例子,還不錯(cuò). 注意, 這個(gè)例子中,結(jié)果值被轉(zhuǎn)化為Python對象了.時(shí)間被轉(zhuǎn)化為一個(gè)dbiDate對象.這里會(huì)有一點(diǎn)限制,因?yàn)閐biDate只能表示UNIX時(shí)間(1 Jan 1970 00:00:00 GMT)之后的時(shí)間.如果你想獲得一個(gè)更早的時(shí)間,可能會(huì)出現(xiàn)亂碼甚至引起系統(tǒng)崩潰.*_* 方法三: 使用 calldll模塊 (Using this module, you can use ODBC API directly. But now the python version is 2.1, and I don't know if other version is compatible with it. 老巫:-) Sam Rushing的calldll模塊可以讓Python調(diào)用任何動(dòng)態(tài)連接庫里面的任何函數(shù),厲害吧?哈.其實(shí),你能夠通過直接調(diào)用odbc32.dll里面的函數(shù)操作ODBC.Sam提供了一個(gè)包裝模塊odbc.py,就是來做這個(gè)事情的.也有代碼來管理數(shù)據(jù)源,安裝ODBC,實(shí)現(xiàn)和維護(hù)數(shù)據(jù)庫引擎 (Microsoft Access).在那些演示和例子代碼中,還有一些讓人側(cè)目的好東東,比如cbdemo.py,有一個(gè)信息循環(huán)和窗口過程的Python函數(shù)! [你可以到Sam's Python Software去找到calldll的相關(guān)連接,那兒還有其他好多有趣的東西] 下面是安裝CALLDLL包的步驟: 1. 安裝PYTHON軟件包(到現(xiàn)在為止最多支持2.1版本) 2. 下載calldll-2001-05-20.zip: ftp://squirl.nightmare.com/pub/python/python-ext/calldll-2001-05-20.zip 3. 在LIB路徑下面創(chuàng)建一個(gè)新路徑比如說: c:/Program Files/Python/lib/caldll/ 4. 在原目錄下解壓calldll.zip 5. 移動(dòng)calldll/lib/中所有的文件到上面一個(gè)父目錄(calldll)里面,刪除子目錄(lib) 6. 在CALL目錄里面生成一個(gè)file __init__.py文件,象這樣: # File to allow this directory to be treated as a python 1.5 7. 編輯calldll/odbc.py: 在"get_info_word"和"get_info_long"里面,改變"calldll.membuf"為"windll.membuf" 下面是一個(gè)怎么使用calldll的例子:
output(輸出)
方法四: 使用ActiveX Data Object(ADO) 現(xiàn)在給出一個(gè)通過Microsoft's ActiveX Data Objects (ADO)來連接MS Access 2000數(shù)據(jù)庫的實(shí)例.使用ADO有以下幾個(gè)好處: 首先,與DAO相比,它能更快地連接數(shù)據(jù)庫;其次,對于其他各種數(shù)據(jù)庫(SQL Server, Oracle, MySQL, etc.)來說,ADO都是非常有效而方便的;再有,它能用于XML和文本文件和幾乎其他所有數(shù)據(jù),因此微軟也將支持它比DAO久一些. 第一件事是運(yùn)行makepy.盡管這不是必須的,但是它對于提高速度有幫助的.而且在PYTHONWIN里面運(yùn)行它非常簡單: 找到工具欄上ToolsàCOM MakePy utilities,你會(huì)看到彈出一個(gè)Select Library的對話框, 在列表中選擇'Microsoft ActiveX Data Objects 2.5 Library ‘(或者是你所有的版本). 然后你需要一個(gè)數(shù)據(jù)源名Data Source Name [DSN] 和一個(gè)連接對象. [我比較喜歡使用DSN-Less 連接字符串 (與系統(tǒng)數(shù)據(jù)源名相比,它更能提高性能且優(yōu)化代碼)]
經(jīng)過上面的設(shè)置之后,就可以直接連接數(shù)據(jù)庫了: 首要的任務(wù)是打開一個(gè)數(shù)據(jù)集/數(shù)據(jù)表
[1和3是常數(shù).代表adOpenKeyset 和adLockOptimistic.我用它作為默認(rèn)值,如果你的情況不同的話,或許你應(yīng)該改變一下.進(jìn)一步的話題請參考ADO相關(guān)材料.] 打開數(shù)據(jù)表后,你可以檢查域名和字段名等等
字段類型和長度被這樣返回A :
現(xiàn)在開始對數(shù)據(jù)集進(jìn)行操作.可以使用SQL語句INSERT INTO或者AddNew() 和Update()
這些值也能夠被返回:
因此如果你想增加一條新的記錄,不必查看數(shù)據(jù)庫就知道什么number 和AutoNumber 字段已經(jīng)產(chǎn)生了
使用ADO,你也能得到數(shù)據(jù)庫里面所有表名的列表:
關(guān)閉連接. 注意這里C是大寫,然而關(guān)閉文件連接是小寫的c. >>> conn.Close() 前面提到,可以使用SQL語句來插入或者更新數(shù)據(jù),這時(shí)我們直接使用一個(gè)連接對象.
最后一個(gè)例子經(jīng)常被看作是ADO的難點(diǎn).一般說來,想要知道一個(gè)表的RecordCount 的話,必須象這樣一個(gè)一個(gè)地計(jì)算他們 :
如果你也象上面那樣些程序的話,非常底效不說,如果數(shù)據(jù)集是空的話,移動(dòng)第一個(gè)記錄的操作會(huì)產(chǎn)生一個(gè)錯(cuò)誤.ADO提供了一個(gè)方法來糾正它.在打開數(shù)據(jù)集之前,設(shè)置CursorLocation 為3. 打開數(shù)據(jù)集之后,就可以知道recordcount了.
[再:3是常數(shù)] 這些只用到ADO的皮毛功夫,但對于從PYTHON來連接數(shù)據(jù)庫,它還是應(yīng)該有幫助的. 想更進(jìn)一步學(xué)習(xí)的話,建議深入對象模型.下面是一些連接: (單步執(zhí)行還可以,為何寫為script就不行?老巫疑惑) 方法五:使用 mxODBC模塊(在Windows和Unix下面都可以用,但是是商業(yè)化軟件,要掏錢的.)下面是相關(guān)連接: http://thor./~pboddie/Python/mxODBC.html http://www./files/python/mxODBC.html 方法六: 對具體的數(shù)據(jù)庫使用特定的PYTHON模塊 MySQL數(shù)據(jù)庫à MySQLdb模塊,下載地址為: http:///projects/mysql-python PostgresSQL數(shù)據(jù)庫àpsycopg模塊 PostgresSQL的主頁為: http://www. Python/PostgresSQL模塊下載地址: http:///software/psycopg Oracle數(shù)據(jù)庫àDCOracle模塊下載地址: http://www./Products/DCOracle àcx_oracle模塊下載地址: http:///projects/cx_oracle/?topic_id=809%2C66 希望本文所述對大家的Python程序設(shè)計(jì)有所幫助。 |
|
|