Python操作SQLite
1.導入sqlite數(shù)據(jù)庫模塊
Python中使用sqlite3模塊操作SQLite。從Python 2.5以后,sqlite3成為內置模塊,不需要額外安裝,只需要導入即可。
import sqlite3
圖8-6 事務提交
2.創(chuàng)建/打開數(shù)據(jù)庫
sqlite3模塊中使用connect方法創(chuàng)建/打開數(shù)據(jù)庫,需要指定數(shù)據(jù)庫路徑,如果數(shù)據(jù)庫存在則打開,不存在則創(chuàng)建一個新的數(shù)據(jù)庫。
con = sqlite3.connect('D:\test.db')
不僅可以在硬盤上創(chuàng)建數(shù)據(jù)庫文件,還可以在內存中創(chuàng)建。
con = sqlite3.connect(':memory:')
3.數(shù)據(jù)庫連接對象
上面通過connect方法返回的con對象,即是數(shù)據(jù)庫連接對象,它提供了以下方法:
·cursor()方法用來創(chuàng)建一個游標對象。
·commit()方法用來事務提交。
·rollback()方法用來事務回滾。
·close()方法用來關閉一個數(shù)據(jù)庫連接。
4.游標對象的使用
對數(shù)據(jù)庫的查詢需要使用到游標對象,首先通過cursor()方法創(chuàng)建一個游標對象:
cur = con.cursor()
游標對象有以下方法支持數(shù)據(jù)庫的操作:
·execute()用來執(zhí)行sql語句。
·executemany()用來執(zhí)行多條sql語句。
·close()用來關閉游標。
·fetchone()用來從結果中取一條記錄,并將游標指向下一條記錄。
·fetchmany()用來從結果中取多條記錄。
·fetchall()用來從結果中取出所有記錄。
·scroll()用于游標滾動。
5.建表
首先使用游標對象創(chuàng)建一個person表,包含id、name、age等3
列,代碼如下:
cur.execute(' CREATE TABLE person (id integer primary key,name varchar(20),
age integer)')
6.插入數(shù)據(jù)
向person表中插入兩條數(shù)據(jù)。插入數(shù)據(jù)一般有兩種做法,第一種做法是直接構造一個插入的SQL語句,代碼如下:
data="0,'qiye',20"
cur.execute(' INSERT INTO person VALUES (%s)'%data)
但是這種做法是非常不安全的,容易導致SQL注入。另一種做法使用占位符“”的方式來規(guī)避這個問題,代碼如下:
cur.execute(' INSERT INTO person VALUES (,,)',(0,'qiye',20))
還可以使用executemany()執(zhí)行多條SQL語句,使用
executemany()方法比循環(huán)使用execute()方法執(zhí)行多條SQL語句效率高很多。
cur.executemany(' INSERT INTO person VALUES (,,)',[(3,'marry',20),(4,'jack',20)])
這兩種方法插入數(shù)據(jù)都不會立即生效,需要使用數(shù)據(jù)庫對象con
進行提交操作:
如果出現(xiàn)錯誤,還可以使用回滾操作:
con.commit()
7.查詢數(shù)據(jù)
查詢person表中的所有數(shù)據(jù),代碼如下:
cur.execute('SELECT * FROM person')
要提取查詢數(shù)據(jù),游標對象提供了fetchall()和fetchone()方法。fetchall()方法獲取所有數(shù)據(jù),返回一個二維的列表。
fetchone()方法獲取其中的一個結果,返回一個元組。使用方法如下:
cur.execute('SELECT * FROM person')
res = cur.fetchall()
for line in res:
print line
cur.execute('SELECT * FROM person')
res = cur.fetchone()
print res
8.修改和刪除數(shù)據(jù)
cur.execute('UPDATE person SET name= WHERE id=',('rose',1))
cur.execute('DELETE FROM person WHERE id=',(0,))
con.commit()
con.close()
注意 執(zhí)行完所有操作記得關閉數(shù)據(jù)庫,插入或者修改中文數(shù)據(jù)時,記得在中文字符串之前加上“u”。
如對本文有疑問,請?zhí)峤坏浇涣髡搲?,廣大熱心網友會為你解答?。?點擊進入論壇