sqlite 是一個(gè)嵌入到應(yīng)用程序內(nèi)的關(guān)系數(shù)據(jù)庫,可以將數(shù)據(jù)保存到內(nèi)存或文件
中,數(shù)據(jù)直接在進(jìn)程內(nèi)部通過本地API訪問,沒有網(wǎng)絡(luò)通信,適合開發(fā)本地應(yīng)用。
sqlite庫不支持ORM,要想使用ORM,推薦的庫是SQLALchemy
import sqlite3
def test_sqlite3():
# 連接到內(nèi)存數(shù)據(jù)庫,這里可以指定一個(gè)本地文件名來創(chuàng)建數(shù)據(jù)庫連接
conn = sqlite3.connect(':memory:')
# 獲得游標(biāo)
c = conn.cursor()
# 創(chuàng)建數(shù)據(jù)庫
c.execute('''CREATE TABLE stocks
(date text, trans text, symbol text, qty real, price real)''')
# 插入一行記錄
c.execute("INSERT INTO stocks VALUES "
"('2006-01-05','BUY','RHAT',100,35.14)")
# 查詢記錄
# 注意,文檔中警告過不要用下面這種方式拼裝查詢語句
# symbol = 'RHAT'
# c.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol)
# 而應(yīng)該用?方式,讓sql引擎來做這個(gè)工作,用元組來傳遞參數(shù)
c.execute('SELECT * FROM stocks WHERE symbol=?', ('RHAT',))
print c.fetchone()
# 游標(biāo)數(shù)據(jù)讀取后,其內(nèi)部會(huì)自動(dòng)移動(dòng)到下一行,因此要重新獲取
c.execute('SELECT * FROM stocks WHERE symbol=?', ('RHAT',))
print c.fetchall()
c.execute('SELECT * FROM stocks WHERE symbol=?', ('RHAT',))
for x in c:
print x
# execute返回的就是游標(biāo)本身
q = c.execute('SELECT * FROM stocks WHERE symbol=?', ('RHAT',))
assert q == c
# 提交
conn.commit()
# 關(guān)閉數(shù)據(jù)庫連接
conn.close()
原文地址:http://www.isware.cn/python-modules/01-data-persistence-and-exchange/sqlite/