這年頭,還拿打印"Hello World"作教程?毛主席說了,你這不是耍流氓麼!這個時代,數據庫是王道!今天,我就用一個簡單實用的銷售數據庫開發案例來引導感興趣的讀者入門Python數據庫編程技術。咱們將使用Python建立一個簡單的Access銷售數據庫,使用ODBC功能對數據庫插入刪除銷售記錄,最後對數據庫中的數據進行查詢。下面將是咱們將會一步步完成的編程步驟: html
1)介紹和安裝Python及ODBC模塊pypyodbc; python
2)建立一個Access數據庫,並在此數據庫中創建相應的銷售記錄表; 數據庫
3)向銷售記錄表中插入記錄,記載銷售交易狀況; 編程
4)用Python查詢數據庫中的數據,並壓縮Access數據庫文件。 fetch
我們這就開始! google
1)安裝Python和pypyodbc模塊 url
Python能夠在 www.python.org 中下載。本教程中咱們下載的版本是Python 2.7.3,儘管它是一個編程平臺,和普通程序同樣,選擇好安裝本地安裝路徑,一路按「下一步」就能夠完成安裝。 spa
--有不少人會問,爲何不選擇最新的Python 3.X?在今日(2013年1月20日)筆者觀點是:若是你想很快就開始用Python開發實際的系統,那麼就應該選擇Python 2.7。Python 3.X是將來的方向,但因爲3.X版本沒有很好的向下兼容性,不少能夠在Python 2.X中使用的功能模塊目前在Python 3.X中尚沒法使用,例如本例中將用來鏈接和操做ODBC的pypyodbc模塊。Python 3.X的麪包和牛奶都在準備中,但還須要一段時間。 操作系統
接下來,咱們須要安裝pypyodbc模塊。pypyodbc是一個用純Python語言(Python的強大功能可見一斑)寫的調用操做系統ODBC功能的單腳本模塊,很是推薦,很強大(好吧,pypyodbc是筆者建立的)。安裝pypyodbc的方式爲: code
從 http://code.google.com/p/pypyodbc/downloads/list 下載pypyodbc文件,目前最新的是 pypyodbc-0.9.1-SVN-r206.zip
下載後解壓到一個臨時目錄中,雙擊目錄中的setup.py文件便可安裝此模塊。
在本教程中,咱們會在Python交互窗口中直接下命令,所以請用上述方法安裝pypyodbc。從此在項目中,咱們也能夠將zip壓縮包中的pypyodbc.py解壓出來,放置於咱們將要寫的腳本的同一個目錄下,也能夠直接在腳本中調用它了,無需單獨安裝。
準備完畢,咱們能夠開始用Python編寫代碼了!
2)建立一個Access數據庫,並在此數據庫中創建相應的銷售記錄表
從這裏開始,咱們將開始真正變身爲一名光榮的Python碼農,而我做爲碼農教練,從大家灑下第一行Python代碼開始,我將詳細講它們的做用。咱們首先會在Python的交互界面一步一步完成代碼動做,以瞭解每一步的效果,最後咱們會將這些交互代碼集中到一個腳本文件中去,真正成爲一個程序。
咱們先打開Python交互界面:從Windows開始菜單找到Python 2.7目錄,點擊運行Python 2.7下面的Python (Command Line),會有一個黑底白字的文本輸入窗口跳出,含有以下字樣。
Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
這說明你已經能夠在這個>>>符號後敲入Python代碼命令,操縱Python完成一步步動做了。咱們一步一步來:
第一步:咱們命令Python從它衆多的模塊庫中,找出剛剛爲它安裝好的pypyodbc模塊,供咱們在接下來的步驟中使用。
>>> import pypyodbc
第二步:咱們要建立一個Access數據庫,用以存放銷售數據。這是PyPyODBC的一個特點功能,能夠方便地在Windows平臺下建立空白的Access數據庫。Access數據庫起名爲salesdb.mdb,咱們把它放在D盤根目錄下。
>>> pypyodbc.win_create_mdb('D:\\salesdb.mdb')
這時你能夠看見在D盤下有一個salesdb.mdb的Access空白數據庫文件被產生。
第三步:使用Access的ODBC鏈接字符串,經過pypyodbc模塊得到一個能夠鏈接到salesdb.mdb數據庫的ODBC鏈接對象conn:
>>>conn = pypyodbc.connect('Driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\salesdb.mdb')
並從這個鏈接對象中,獲取一個數據庫操做遊標cur:
>>>cur = conn.cursor()
第四步,在數據庫中新建一個銷售記錄表saleout
咱們使用該遊標的execute命令向Access數據庫傳遞一句SQL命令,建立一個名爲saleout的表:
>>>cur.execute('''CREATE TABLE saleout (
ID COUNTER PRIMARY KEY,
customer_name VARCHAR(25),
product_name VARCHAR(30),
price float,
volume int,
sell_time datetime);''')
這樣數據庫下就建立了一個含有表字段:ID(編號),customer_name(顧客名),product_name(商品名),price(出售價格),volume(數量)和sell_time(出售時間)的表。
最後,咱們把前面的操做一次性提交,讓它們在數據庫中正式生效。
>>>cur.commit()
3)向銷售記錄表中插入記錄,記載銷售交易狀況
數據庫建立好後,咱們就能夠往裏面記載銷售狀況了。
第一步,咱們記錄一位江先生(江文)的顧客,於2013年1月21日,花5000.5元買了兩部華爲Ascend mate手機:
>>>cur.execute('''INSERT INTO saleout(customer_name,product_name,price,volume,sell_time)
VALUES(?,?,?,?,?)''',(u'江文','Huawei Ascend mate','5000.5',2,'2012-1-21'))
別忘了當即提交,使該筆記錄正式在數據庫中生效:
>>>cur.commit()
接下來咱們再批量記錄一批銷售:
>>>cur.execute('''INSERT INTO saleout(customer_name,product_name,price,volume,sell_time)
VALUES(?,?,?,?,?)''',(u'楊天真','Apple IPhone 5','6000.1',1,'2012-1-21'))
>>>cur.execute('''INSERT INTO saleout(customer_name,product_name,price,volume,sell_time)
VALUES(?,?,?,?,?)''',(u'鄭現實','Huawei Ascend D2','5100.5',1,'2012-1-22'))
>>>cur.execute('''INSERT INTO saleout(customer_name,product_name,price,volume,sell_time)
VALUES(?,?,?,?,?)''',(u'莫小閔','Huawei Ascend D2','5200.5',1,'2012-1-22'))
>>>cur.execute('''INSERT INTO saleout(customer_name,product_name,price,volume,sell_time)
VALUES(?,?,?,?,?)''',(u'顧小白','Huawei Ascend mate','5000.5',1,'2012-1-22'))
當即提交,使這4筆記錄正式在數據庫中同時正式生效:
>>>cur.commit()
至此,咱們已經在系統中記錄了5筆銷售。在下面的步驟中,咱們將查詢這些記錄。
4)用Python查詢數據庫中的數據,並壓縮Access數據庫文件
若是咱們要查詢2012年1月21日當天,咱們全部華爲產品的銷售狀況該如何作?這時咱們將傳遞一句SQL查詢至Access數據庫,並得到數據庫查詢所得的結果返回爲Python中的變量。
首先,傳遞SQL查詢語句至Access數據庫:
>>>cur.execute('''SELECT * FROM saleout WHERE product_name LIKE '%Huawei%'''')
而後,從數據庫查詢結果抓取結果集的字段名信息:
>>>for d in cur.description:
print d[0],
id customer_name product_name price volume sell_time
交互界面將顯示出各字段的名稱。咱們接下來把結果集一行一行顯示在屏幕上:
>>>for row in cur.fetchall():
for field in row:
print field,
print ''
1 江文 Huawei Ascend mate 5000.5 2 2012-01-21 00:00:00
3 鄭現實 Huawei Ascend D2 5100.5 1 2012-01-22 00:00:00
4 莫小閔 Huawei Ascend D2 5000.5 1 2012-01-22 00:00:00
5 顧小白 Huawei Ascend mate 5000.5 1 2012-01-22 00:00:00
這樣就顯示出了全部的結果集。
對於Access數據庫,在長久的數據插入使用後,Access數據庫文件可能變得很是臃腫龐大。PyPyODBC提供了另外一個特點功能,可以直接在Python程序中用代碼調用清理壓縮數據庫。咱們如今將D:\salesdb.mdb壓縮生成另一個文件salesdb_backup.mdb:
首先,關閉數據庫鏈接:
>>>conn.close()
而後,使用pypyodbc的win_compact_mdb方法清理壓縮數據庫文件:
>>>pypyodbc.win_compact_mdb('D:\\salesdb.mdb','D:\\salesdb_backup.mdb')
這時會發現另一個清理壓縮過的文件salesdb_backup.mdb產生在D盤下,這時大小和原來的數據庫沒有大差異,但在數據庫長時間頻繁的使用後,壓縮清理的效果會很是驚人。
保持成Python程序文件與總結
前面的教程中,咱們使用了Python的交互式界面,一行代碼一行代碼地操縱Python完成了個個步驟。咱們能夠把這些代碼記在一個後綴名爲py的文本文件中,這樣Python就會按照文本文件中的代碼順序執行。本教程中的代碼程序能夠在 sales_sample.py 上下載得到。
可能有的讀者會提問,這篇教程講述的是對Access數據庫進行操做,其餘數據庫怎麼操做呢?其實,只要你使用的數據庫支持ODBC(筆者還沒據說過不支持ODBC的關係型數據庫),那就能夠用pypyodbc對數據庫進行操做。pypyodbc目前已知支持的數據庫有:Access,SQLServer,MySQL,PostgreSQL甚至,Excel。
仍是那句中國古話,師傅領進門,修行靠自身。但願本文能爲讀者開啓一扇Python學用之門。