<<Python基礎教程>>學習筆記 | 第13章 | 資料庫支援

來源:互聯網
上載者:User

標籤:python

備忘:這章內容相對介紹的比較簡單,不過例子比較使用,主要是要掌握如果串連,使用資料庫,並以SQLite做樣本

------

Python資料庫API

為瞭解決Python中各種資料庫模組間的相容問題,現在已經通過了一個標準的DB API。目前的API版本(2.0)定義在PEP249中的Python Database API Specification v2.0中.


異常

為了儘可能準確地處理錯誤,API中定義了一些異常。它們被定義在一種階層中,所以可以通過一個except塊捕捉多種異常.


串連和遊標

為了使用基礎資料庫系統,必須串連它。就要用到connect函數,該函數有多個參數.


connect函數返回連線物件。這個對象表示目前和資料庫的會話。連線物件支援的方法如下:


rollback: 必須該資料庫支援,否則不可用

commit  : 總是可用的,但是如果有的資料庫不支援事務,則不起作用

cursor  : 遊標對象,通過遊標執行SQL查詢並檢查結果。遊標支援的方法更多.


類型:

資料庫對插入到具有某種類型的列中的值有不同的要求,是為了能正確與基礎SQL資料庫進行互動操作.

下面以sqlite3模組為例:


SQLite和PySQLite

這裡選擇了小型資料庫引擎SQLite,不需要作為獨立的伺服器運行,並且不基於集中式資料庫儲存機制,而是直接作用於本地檔案. 從Python 2.5開始, SQLite的優勢在於它的一個封裝PySQLite已經包括在資料庫內,不需要單獨安裝. SQLite網站下載源碼: http://sqlite.org 

------

入門:

#匯入模組

>>>import sqlite3

#建立串連,檔案不存在則會建立

>>>conn = sqlite3.connect(‘test.db‘)

#獲得串連的遊標

>>>curs = conn.cursor()

#提交事務,這樣操作才會保留在本地

>>>conn.commit()

#關閉資料庫

>>>conn.close()

------

樣本: 

準備資料:將網站:http://www.ars.usda.gov/nutrientdata首頁上點擊USDA National Nutrient Database for Standard Reference連結,ASCII保持的zip資料檔案,保留到本地,ABBREV.txt檔案,格式大致如下:

~23451~^~BEEF,NZ,IMP,BRISKET POINT END,LN & FAT,RAW~^70.11^

~23452~^~BEEF,NZ,IMP,CHUCK EYE ROLL,LN & FAT,CKD,BRSD~^55.95^

欄位以^進行分割,數字欄位包含數字,而文本段包括~的字串值.可以用line.split(‘^‘)將一行文字解析為多個欄位。對於其他的數字欄位,使用float(field).下面是完整的指令碼及輸出結果:

  • 代碼清單1: 將資料匯入本機資料庫

import sqlite3def convert(value):    if value.startswith('~'):        return value.strip('~')    if not value:        value = '0'    return float(value)conn = sqlite3.connect('food.db')curs = conn.cursor()curs.execute('''CREATE TABLE food(id          TEXT PRIMARY KEY,desc        TEXT,water       FLOAT,      kcal        FLOAT,protein     FLOAT,fat         FLOAT,ash         FLOAT,carbs       FLOAT,fiber       FLOAT,sugar       FLOAT)    ''')query = 'INSERT INTO food VALUES(?,?,?,?,?,?,?,?,?,?)' for line in open('ABBREV.txt'):    fields = line.split('^')    vals   = [convert(f) for f in fields[:10]]    curs.execute(query,vals)conn.commit()conn.close()
  • 代碼清單2: 食品資料庫查詢程式
import sqlite3,sysconn = sqlite3.connect('food.db')curs = conn.cursor()query = 'SELECT * FROM food WHERE %s' % sys.argv[1]print querycurs.execute(query)names = [f[0] for f in curs.description]for row in curs.fetchall():    for pair in zip(names,row):        print '%s: %s' % pair    print
輸出結果:

+++++++++++++++++++++++++++++++++++++++++++++++++

d:\>python food_query.py id

id: 23449
desc: BEEF,NZ,IMP,BRISKET NAVAL END,LN & FAT,RAW
water: 53.33
kcal: 345.0
protein: 15.81
fat: 31.27
ash: 0.61
carbs: 0.0
fiber: 0.0
sugar: 0.0

id: 23450
desc: BEEF,NZ,IMP,BRISKET POINT END,LN & FAT,CKD,BRSD
water: 54.66
kcal: 250.0
protein: 31.94
fat: 13.6
ash: 0.78
carbs: 0.0
fiber: 0.0
sugar: 0.0

+++++++++++++++++++++++++++++++++++++++++++++++++

d:\>python food_query.py "kcal<=100 AND fiber >=0 ORDER BY sugar"

id: 09512
desc: GRAPE JUC,CND OR BTLD,W/ ADDED VIT C & CA
water: 84.51
kcal: 62.0
protein: 0.37
fat: 0.13
ash: 0.22
carbs: 14.77
fiber: 0.2
sugar: 14.2





<<Python基礎教程>>學習筆記 | 第13章 | 資料庫支援

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.