萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 編程語言綜合 >> Python實現數據庫編程方法詳解

Python實現數據庫編程方法詳解

   本文實例講述了Python實現數據庫編程方法。分享給大家供大家參考。具體分析如下:

  用PYTHON語言進行數據庫編程, 至少有六種方法可供采用. 我在實際項目中采用,不但功能強大,而且方便快捷.以下是我在工作和學習中經驗總結.

  方法一:使用DAO (Data Access Objects)

  這個第一種方法可能會比較過時啦.不過還是非常有用的. 假設你已經安裝好了PYTHONWIN,現在開始跟我上路吧……

  找到工具欄上ToolsàCOM MakePy utilities,你會看到彈出一個Select Library的對話框, 在列表中選擇'Microsoft DAO 3.6 Object Library'(或者是你所有的版本).

  現在實現對數據的訪問:

  ?

1 2 3 4 5 #實例化數據庫引擎 import win32com.client engine = win32com.client.Dispatch("DAO.DBEngine.35") #實例化數據庫對象,建立對數據庫的連接 db = engine.OpenDatabase(r"c:/temp/mydb.mdb")

  現在你有了數據庫引擎的連接,也有了數據庫對象的實例.現在就可以打開一個recordset了. 假設在數據庫中已經有一個表叫做 'customers'. 為了打開這個表,對其中數據進行處理,我們使用下面的語法:

  ?

1 2 3 rs = db.OpenRecordset("customers") #可以采用SQL語言對數據集進行操縱 rs = db.OpenRecordset("select * from customers where state = 'OH'")

  你也可以采用DAO的execute方法. 比如這樣:

  ?

1 2 db.Execute("delete * from customers where balancetype = 'overdue' and name = 'bill'") #注意,刪除的數據不能復原了J

  EOF 等屬性也是可以訪問的, 因此你能寫這樣的語句:

  ?

1 2 3 while not rs.EOF: print rs.Fields("State").Value rs.MoveNext()

  我最開始采用這個方法,感覺不錯.

  方法二:使用Python DB API,Python ODBC modules(you can use ODBC API directly, but maybe it is difficult for most beginner.)

  為了在Python裡面也能有通用的數據庫接口,DB-SIG為我們提供了Python數據庫.(欲知詳情,訪問DB-SIG的網站,http://www.python.org/sigs/db-sig/). Mark

  Hammond的win32擴展PythonWin裡面包含了這些API的一個應用-odbc.pyd. 這個數據庫API僅僅開放了一些有限的ODBC函數的功能(那不是它的目的),但是它使用起來很簡單,而且在win32裡面是免費的.

  安裝odbc.pyd的步驟如下:

  1. 安裝python軟件包:

  http://www.python.org/download/

  2. 安裝Mark Hammond的最新版本的python win32擴展 - PythonWin:

  http://starship.python.net/crew/mhammond/

  3. 安裝必要的ODBC驅動程序,用ODBC管理器為你的數據庫配置數據源等參數

  你的應用程序將需要事先導入兩個模塊:

  dbi.dll - 支持各種各樣的SQL數據類型,例如:日期-dates

  odbc.pyd – 編譯產生的ODBC接口

  下面有一個例子:

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 import dbi, odbc # 導入ODBC模塊 import time # 標准時間模塊 dbc = odbc.odbc( # 打開一個數據庫連接 'sample/monty/spam' # '數據源/用戶名/密碼' ) crsr = dbc.cursor() # 產生一個cursor crsr.execute( # 執行SQL語言 """ SELECT country_id, name, insert_change_date FROM country ORDER BY name """ ) print 'Column descriptions:' # 顯示行描述 for col in crsr.description: print ' ', col result = crsr.fetchall() # 一次取出所有的結果 print '/nFirst result row:/n ', result[0] # 顯示結果的第一行 print '/nDate conversions:' # 看看dbiDate對象如何? date = result[0][-1] fmt = ' %-25s%-20s' print fmt % ('standard string:', str(date)) print fmt % ('seconds since epoch:', float(date)) timeTuple = time.localtime(date) print fmt % ('time tuple:', timeTuple) print fmt % ('user defined:', time.strftime('%d %B %Y', timeTuple))

  下面是結果:

  輸出(output)

  ?

1 2 3 4 5 6 7 8 9 10 11 Column descriptions: ('country_id', 'NUMBER', 12, 10, 10, 0, 0) ('name', 'STRING', 45, 45, 0, 0, 0) ('insert_change_date', 'DATE', 19, 19, 0, 0, 1) First result row: (24L, 'ARGENTINA', <DbiDate object at 7f1c80>) Date conversions: standard string: Fri Dec 19 01:51:53 1997 seconds since epoch: 882517913.0 time tuple: (1997, 12, 19, 1, 51, 53, 4, 353, 0) user defined: 19 December 1997

  大家也可以去http://www.python.org/windows/win32/odbc.html看看,那兒有兩個Hirendra Hindocha寫的例子,還不錯.

  注意, 這個例子中,結果值被轉化為Python對象了.時間被轉化為一個dbiDate對象.這裡會有一點限制,因為dbiDate只能表示UNIX時間(1 Jan 1970 00:00:00 GMT)之後的時間.如果你想獲得一個更早的時間,可能會出現亂碼甚至引起系統崩潰.*_*

  方法三: 使用 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調用任何動態連接庫裡面的任何函數,厲害吧?哈.其實,你能夠通過直接調用odbc32.dll裡面的函數操作ODBC.Sam提供了一個包裝模塊odbc.py,就是來做這個事情的.也有代碼來管理數據源,安裝ODBC,實現和維護數據庫引擎 (Microsoft Access).在那些演示和例子代碼中,還有一些讓人側目的好東東,比如cbdemo.py,有一個信息循環和窗口過程的Python函數!

  [你可以到Sam's Python Software去找到calldll的相關連接,那兒還有其他好多有趣的東西]

  下面是安裝CALLDLL包的步驟:

  1. 安裝PYTHON軟件包(到現在為止最多支持2.1版本)

  2. 下載calldll-2001-05-20.zip:

  ftp://squirl.nightmare.com/pub/python/python-ext/calldll-2001-05-20.zip

  3. 在LIB路徑下面創建一個新路徑比如說:

  c:/Program Files/Python/lib/caldll/

  4. 在原目錄下解壓calldll.zip

  5. 移動calldll/lib/中所有的文件到上面一個父目錄(calldll)裡面,刪除子目錄(lib)

  6. 在CALL目錄裡面生成一個file __init__.py文件,象這樣:

  # File to allow this directory to be treated as a python 1.5

  package.

  7. 編輯calldll/odbc.py:

  在"get_info_word"和"get_info_long"裡面,改變"calldll.membuf"為"windll.membuf"

  下面是一個怎麼使用calldll的例子:

  ?

1 2 3 4 5 6 7
copyright © 萬盛學電腦網 all rights reserved