cursor就是一個Cursor對象,這個cursor是一個實現了迭代器(def__iter__())和生成器(yield)的MySQLdb對象,這個時候cursor中尚未數據,只有等到fetchone()或fetchall()的時候才返回一個元組tuple,才支持len()和index()操做,這也是它是迭代器的緣由。但同時爲何說它是生成器呢?由於cursor只能用一次,即每用完一次以後記錄其位置,等到下次再取的時候是從遊標處再取而不是從頭再來,並且fetch完全部的數據以後,這個cursor將再也不有使用價值了,即再也不能fetch到數據了。python
數據庫支持sql
使用簡單的純文本只能實現有退限的功能,所須要引入數據庫,完成更強大的功能,本節使用的簡單數據庫SQLite 。數據庫
SQLite 和PySQLiteapi
sqlite是很是著名的開源嵌入式數據庫軟件,它能夠嵌入到其餘程序中使用,而且提供SQL接口用來查詢,很是方便。它的官方站點爲http://www.sqlite.org。函數
而pysqlite 則是一個sqlite 爲 python 提供的 api 接口,它讓一切對於 sqlite 的操做都變得異常簡單測試
在python2.5版本這後,SQLite的優點在於它的一個包裝(PySQLite)已經被包括在標準庫內,因此咱們能夠直接使用。fetch
入門操做code
能夠將SQLite做爲名爲sqlite3的模塊導入。以後就能夠建立一個到數據庫文件的鏈接----若是文件不存在就會被建立----經過提供一個文件名:sqlite
>>> import sqlite3 >>> conn= sqlite3.connect('somedatabase.db') # 建立數據庫 >>>cu =conn.cursor() #能得到鏈接的遊標 #建立數據表 >>>cu.execute("""create table catalog ( id integer primary key, pid integer, name varchar(10) UNIQUE )""") #插入兩條數據 >>>cu.execute("insert into catalog values(0,0,'name1')") >>>cu.execute("insert into catalog values(1,0,'name2')") >>>conn.commit() #選擇(select) >>>cu.execute("select * from catalog") >>>cu.fetchall() [(0, 0, 'name1'), (1, 0, 'name2')] >>>cu.execute("select * from catalog where id = 1") >>>cu.fetchall() [(1, 0, 'name2')] #修改(update) >>>cu.execute(「update catalog set name=’name2′ where id = 0″) >>> cx.commit() >>> cu.execute(「select * from catalog」) >>> cu.fetchone() (0, 0, ‘name2′) #刪除(delete) >>>cu.execute(「delete from catalog where id= 1″) >>> cx.commit() >>> cu.execute(「select * from catalog」) >>> cu.fetchall() [(0, 0, 'name2')]
鏈接對象
爲了使用基礎數據庫系統,首先必須鏈接到它,這個時候須要使用具備名稱的connect函數,該函數有多個參數,而具體用哪一個參數取決於數據庫。
connect函數的經常使用參數:
connect函數返回鏈接對象。這個對象表示目前和數據庫的會話。鏈接對象支持的方法以下;
鏈接對象方法:
commit 方法老是可用的,但若是數據庫不支持事務,它就沒有任何做用。若是關閉了鏈接但還有未提交的事務,它們會隱式地回滾---可是隻有在數據庫支持持回滾的時候才能夠。
rollback 方法可能不可用,由於不是全部的數據庫都支持事務(事務是一系列動做)。若是可用,那麼就能夠「撤銷」全部未提交的事務。
cursor 方法將咱們引入另一個主題:遊標對象。經過遊標掃行SQL 查詢並檢查結果。遊標鏈接支持更多的方法,並且可能在程序中更好用。
遊標:
cu = conn.cursor()
能得到鏈接的遊標,這個遊標能夠用來執行SQL查詢。
conn.commit()
完成插入而且作出某些更改後確保已經進行了提交,這樣才能夠將這些修改真正地保存到文件中。
遊標對象方法:
遊標對象特性:
cu.fetchone()
fetchall()返回結果集中的所有數據,結果爲一個tuple的列表。每一個tuple元素是按建表的字段順序排列。注意,遊標是有狀態的,它能夠記錄當前已經取到結果的第幾個記錄了,所以,通常你只能夠遍歷結果集一次。在上面的狀況下,若是執行fetchone()會返回爲空。這一點在測試時須要注意。
conn.close()
能夠在每次修改數據庫後都進行提交,而不是僅僅在準備關閉才提交,準備關閉數據時,使用close 方法。