Python中使用SQLite的簡單教程
SQLite是一種嵌入式數(shù)據(jù)庫陶缺,它的數(shù)據(jù)庫就是一個文件跪但。由于SQLite本身是C寫的凉当,而且體積很小,所以嚷缭,經(jīng)常被集成到各種應(yīng)用程序中饮亏,甚至在iOS和Android的App中都可以集成。
Python就內(nèi)置了SQLite3,所以克滴,在Python中使用SQLite,不需要安裝任何東西优床,直接使用劝赔。
在使用SQLite前,我們先要搞清楚幾個概念:
表是數(shù)據(jù)庫中存放關(guān)系數(shù)據(jù)的集合胆敞,一個數(shù)據(jù)庫里面通常都包含多個表着帽,比如學(xué)生的表,班級的表移层,學(xué)校的表仍翰,等等。表和表之間通過外鍵關(guān)聯(lián)观话。
要操作關(guān)系數(shù)據(jù)庫予借,首先需要連接到數(shù)據(jù)庫,一個數(shù)據(jù)庫連接稱為Connection频蛔;
連接到數(shù)據(jù)庫后灵迫,需要打開游標(biāo),稱之為Cursor晦溪,通過Cursor執(zhí)行SQL語句瀑粥,然后,獲得執(zhí)行結(jié)果三圆。
Python定義了一套操作數(shù)據(jù)庫的API接口狞换,任何數(shù)據(jù)庫要連接到Python,只需要提供符合Python標(biāo)準(zhǔn)的數(shù)據(jù)庫驅(qū)動即可舟肉。
由于SQLite的驅(qū)動內(nèi)置在Python標(biāo)準(zhǔn)庫中修噪,所以我們可以直接來操作SQLite數(shù)據(jù)庫。
我們在Python交互式命令行實踐一下:
導(dǎo)入SQLite驅(qū)動:
>>> import sqlite3
連接到SQLite數(shù)據(jù)庫
數(shù)據(jù)庫文件是test.db
如果文件不存在路媚,會自動在當(dāng)前目錄創(chuàng)建:
>>> conn = sqlite3.connect('test.db')
創(chuàng)建一個Cursor:
>>> cursor = conn.cursor()
執(zhí)行一條SQL語句割按,創(chuàng)建user表:
>>> cursor.execute('create table user (id varchar(20) primary key, name varchar(20))')
<sqlite3.Cursor object at 0x10f8aa260>
繼續(xù)執(zhí)行一條SQL語句,插入一條記錄:
>>> cursor.execute('insert into user (id, name) values (\'1\', \'Michael\')')
<sqlite3.Cursor object at 0x10f8aa260>
通過rowcount獲得插入的行數(shù):
>>> cursor.rowcount
1
關(guān)閉Cursor:
>>> cursor.close()
提交事務(wù):
>>> conn.commit()
關(guān)閉Connection:
>>> conn.close()
我們再試試查詢記錄:
>>> conn = sqlite3.connect('test.db')
>>> cursor = conn.cursor()
執(zhí)行查詢語句:
>>> cursor.execute('select * from user where id=?', '1')
<sqlite3.Cursor object at 0x10f8aa340>
獲得查詢結(jié)果集:
>>> values = cursor.fetchall()
>>> values [(u'1', u'Michael')]
>>> cursor.close()
>>> conn.close()
使用Python的DB-API時磷籍,只要搞清楚Connection和Cursor對象适荣,打開后一定記得關(guān)閉,就可以放心地使用院领。
使用Cursor對象執(zhí)行insert弛矛,update,delete語句時比然,執(zhí)行結(jié)果由rowcount返回影響的行數(shù)丈氓,就可以拿到執(zhí)行結(jié)果。
使用Cursor對象執(zhí)行select語句時,通過featchall()可以拿到結(jié)果集万俗。結(jié)果集是一個list湾笛,每個元素都是一個tuple,對應(yīng)一行記錄闰歪。
如果SQL語句帶有參數(shù)嚎研,那么需要把參數(shù)按照位置傳遞給execute()方法,有幾個?占位符就必須對應(yīng)幾個參數(shù)库倘,例如:
>>>cursor.execute('select * from user where id=?', '1')
SQLite支持常見的標(biāo)準(zhǔn)SQL語句以及幾種常見的數(shù)據(jù)類型临扮。具體文檔請參閱SQLite官方網(wǎng)站。
小結(jié)
在Python中操作數(shù)據(jù)庫時教翩,要先導(dǎo)入數(shù)據(jù)庫對應(yīng)的驅(qū)動杆勇,然后,通過Connection對象和Cursor對象操作數(shù)據(jù)饱亿。
要確保打開的Connection對象和Cursor對象都正確地被關(guān)閉蚜退,否則,資源就會泄露彪笼。
如何才能確保出錯的情況下也關(guān)閉掉Connection對象和Cursor對象呢关霸?請回憶try:...except:...finally:...的用法。