簡單的介紹
SQLite資料庫是一款非常小巧的嵌入式開源資料庫軟體,也就是說沒有獨立的維護進程,所有的維護都來自於程式本身。它是遵守ACID的關聯式資料庫管理系統,它的設計目標是嵌入式的,而且目前已經在許多嵌入式產品中使用了它,它佔用資源非常的低,在嵌入式設備中,可能只需要幾百K的記憶體就夠了。它能夠支援Windows/Linux/Unix等等主流的作業系統,同時能夠跟很多程式語言結合,例如Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源世界著名的資料庫管理系統來講,它的處理速度比他們都快。 SQLite第一個Alpha版本誕生於2000年5月. 至今已經有10個年頭,SQLite也迎來了一個版本 SQLite 3已經發布。
安裝與使用
1.導入Python SQLITE資料庫模組
Python2. SQLITE資料庫模組
Python2. ~
import sqlite3
2. 建立/開啟資料庫
在呼叫connect函數的時候,指定函式庫名稱,如果指定的資料庫存在就直接開啟這個資料庫,如果不存在就新建立一個函數的時候,指定函式庫名稱,如果指定的資料庫存在就直接開啟這個資料庫,如果不存在就新建立一個函數。
cx = sqlite3.connect("E:/test.db")
也可在記憶體中建立資料庫。
con = sqlite3.connect(":memory:")
3.資料庫連線物件
開啟資料庫時傳回的物件cx就是資料庫連線對象,它可以有下列作業:
() -交易提交 rollback()--事務回滾 close()--關閉一個資料庫連線 cursor()--建立一個遊標對資料庫的操作,都需要使用該指令,你也可以設定isolation_level=None,這樣就變成自動提交模式。
4.使用遊標查詢資料庫
我們需要使用遊標物件SQL語句查詢資料庫,取得查詢物件。 透過以下方法來定義一個遊標。
cu=cx.cursor()
遊標物件有以下的操作:
execute()--執行sql語句
fetchone()--從結果中取一筆記錄,並將遊標指向下一筆記錄
fetchmany()--從結果中取多個記錄
fetchall()--從結果中取出所有記錄
fetchall()--從結果中取出所有記錄
fetchall()--從結果中取出所有記錄()--遊標捲動
1. 建表
cu.execute("create table catalog (id integer primary key,pid integer,name varchar(10) UNI5,3305I integer建立了一個叫catalog的表,它有一個主鍵id,一個pid,和一個name,name是不可以重複的,以及一個nickname預設為NULL。
2. 插入資料
請注意避免以下寫法:
# Never do this -- insecure
正確的做法如下,如果t只是單一數值,也要採用t=(n,)的形式,因為元組是不可變的。
for t in[(0,10,'abc','Yu'),(1,20,'cba','Xu')]: cx.execute("insert into catalog values ?,? ,?)", t)
簡單的插入兩行資料,不過需要提醒的是,只有提交了之後,才能生效.我們使用資料庫連接物件cx來進行提交commit和回滾rollback操作.
cx. commit()
3.查詢
cu.execute("select * from catalog")
要提取查詢到的資料函數使用如遊標的.fetchall() Out[10]: [(0, 10, u'abc', u'Yu'), (1, 20, u'cba', u'Xu')]
如果我們使用cu.fetchone (),則先回傳清單中的第一項,再使用,則回傳第二項,依序下去.
4.修改
In [12]: cu.execute("update catalog set name=' Boy' where id = 0") In [13]: cx.commit()
注意,修改資料以後提交
5.移除.commit()
6.使用中文
請先確定你的IDE或系統預設編碼是utf-8,並且在中文前加上u
x=u'魚' cu.execute("update catalog set name=? where id = 0",x) cu.execute("select * from catalog") cu.fetchall() [0,0,0008 u9c7c', u'Yu'), (1, 20, u'cba', u'Xu')]
如果要顯示中文字體,則需要依序列印每個字串
In ]: for item in cu.fetchall(): ....: for element in item: ....: 0 10 魚 Yu 1 20 cba Xu
7.Row類型
Row提供了基於索引和基於名字大小寫敏感的方式來訪問列而幾乎沒有內存開銷。 原文如下:
sqlite3.Row provides both index-based and case-insensitive name-based access to columns with almost no memory overhead. It will prodrowing be b than your own st no memory mohead。 .
Row對象的詳細介紹
class sqlite3.Row
A Row instance serves as a highly optimized row_factory instance serves as a highly optimized row_factory
It supports mapping access by column name and index, iteration, representation, equality testing and len().If two Row objects have exactly the same columns and their members are equal, they compare equal. ashability ).keys()This method returns a tuple of column names. Immediately after a query, it is the first member of each tuple in Cursor.description..