python sqlite数据库_用Python进行SQLite数据库操作
簡單的介紹
SQLite數(shù)據(jù)庫是一款非常小巧的嵌入式開源數(shù)據(jù)庫軟件,也就是說沒有獨立的維護進程,所有的維護都來自于程序本身。它是遵守ACID的關(guān)聯(lián)式數(shù)據(jù)庫管理系統(tǒng),它的設(shè)計目標是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統(tǒng),同時能夠跟很多程序語言相結(jié)合,比如 Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源世界著名的數(shù)據(jù)庫管理系統(tǒng)來講,它的處理速度比他們都快。SQLite第一個Alpha版本誕生于2000年5月. 至今已經(jīng)有10個年頭,SQLite也迎來了一個版本 SQLite 3已經(jīng)發(fā)布。
安裝與使用
1.導入Python SQLITE數(shù)據(jù)庫模塊
Python2.5之后,內(nèi)置了SQLite3,成為了內(nèi)置模塊,這給我們省了安裝的功夫,只需導入即可~
import?sqlite3
2. 創(chuàng)建/打開數(shù)據(jù)庫
在調(diào)用connect函數(shù)的時候,指定庫名稱,如果指定的數(shù)據(jù)庫存在就直接打開這個數(shù)據(jù)庫,如果不存在就新創(chuàng)建一個再打開。
cx?=?sqlite3.connect("E:/test.db")
也可以創(chuàng)建數(shù)據(jù)庫在內(nèi)存中。
con?=?sqlite3.connect(":memory:")
3.數(shù)據(jù)庫連接對象
打開數(shù)據(jù)庫時返回的對象cx就是一個數(shù)據(jù)庫連接對象,它可以有以下操作:
commit()--事務(wù)提交
rollback()--事務(wù)回滾
close()--關(guān)閉一個數(shù)據(jù)庫連接
cursor()--創(chuàng)建一個游標
關(guān)于commit(),如果isolation_level隔離級別默認,那么每次對數(shù)據(jù)庫的操作,都需要使用該命令,你也可以設(shè)置isolation_level=None,這樣就變?yōu)樽詣犹峤荒J健?/p>
4.使用游標查詢數(shù)據(jù)庫
我們需要使用游標對象SQL語句查詢數(shù)據(jù)庫,獲得查詢對象。 通過以下方法來定義一個游標。
cu=cx.cursor()
游標對象有以下的操作:execute()--執(zhí)行sql語句
executemany--執(zhí)行多條sql語句
close()--關(guān)閉游標
fetchone()--從結(jié)果中取一條記錄,并將游標指向下一條記錄
fetchmany()--從結(jié)果中取多條記錄
fetchall()--從結(jié)果中取出所有記錄
scroll()--游標滾動
1. 建表
cu.execute("create?table?catalog?(id?integer?primary?key,pid?integer,name?varchar(10)?UNIQUE,nickname?text?NULL)")
上面語句創(chuàng)建了一個叫catalog的表,它有一個主鍵id,一個pid,和一個name,name是不可以重復的,以及一個nickname默認為NULL。
2. 插入數(shù)據(jù)
請注意避免以下寫法:
#?Never?do?this?--?insecure?會導致注入攻擊
pid=200
c.execute("...?where?pid?=?'%s'"?%?pid)
正確的做法如下,如果t只是單個數(shù)值,也要采用t=(n,)的形式,因為元組是不可變的。
for?t?in[(0,10,'abc','Yu'),(1,20,'cba','Xu')]:
cx.execute("insert?into?catalog?values?(?,?,?,?)",?t)
簡單的插入兩行數(shù)據(jù),不過需要提醒的是,只有提交了之后,才能生效.我們使用數(shù)據(jù)庫連接對象cx來進行提交commit和回滾rollback操作.
cx.commit()
3.查詢
cu.execute("select?*?from?catalog")
要提取查詢到的數(shù)據(jù),使用游標的fetch函數(shù),如:
In?[10]:?cu.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()
注意,修改數(shù)據(jù)以后提交
5.刪除
cu.execute("delete?from?catalog?where?id?=?1")
cx.commit()
6.使用中文
請先確定你的IDE或者系統(tǒng)默認編碼是utf-8,并且在中文前加上u
x=u'魚'
cu.execute("update?catalog?set?name=??where?id?=?0",x)
cu.execute("select?*?from?catalog")
cu.fetchall()
[(0,?10,?u'\u9c7c',?u'Yu'),?(1,?20,?u'cba',?u'Xu')]
如果要顯示出中文字體,那需要依次打印出每個字符串
In?[26]:?for?item?in?cu.fetchall():
....:?????for?element?in?item:
....:?????????print?element,
....:
0?10?魚?Yu
1?20?cba?Xu
總結(jié)
以上是生活随笔為你收集整理的python sqlite数据库_用Python进行SQLite数据库操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java - 百钱百鸡小算法
- 下一篇: ajaxSubmit