在python操做數據庫中游標的使用方法

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 方法。

相關文章
相關標籤/搜索