為什么使用SQLite數據庫?
對於非常簡單的應用而言,使用文件作為持久化存儲通常就足夠了,但是大多數復雜的數據驅動的應用需要全功能的關系型數據庫。SQLite的目標則是介於兩者之間的中小系統。它有以下特點:
- 輕量級
- 速度快
- 無需部署
- 沒有服務器
- 很少或不需要進行管理
SQLite正在迅速流行起來,並且它還適用於不同的平台。Python 2.5中引入了SQLite數據庫適配器作為sqlite3模塊,這是Python首次將數據庫適配器納入到標准庫中。
SQLite被打包到Python的標准庫中,並不是因為它比其他數據庫和適配器更加流行,而是因為它足夠簡單,像DBM模塊一樣使用文件(或內存)作為其后端存儲,不需要服務器,也沒有許可證的問題。它是Python中其他類似的持久化存儲解決方案的一個替代品,不過除此以外,它還擁有SQL接口。
在標准庫中擁有該模塊,可以使你在Python中使用SQLite開發更加快速,並且使你在有需要的時候,能夠更加容易地移植到更加強大的RDBMS(比如MySQL、PostgreSQL、Oracle或SQL Server)中。如果你不需要那些強大的數據庫,那么sqlite3已經是很好的選擇了。
我們接下來演示幾個常用操作:
- 創建數據庫
- 創建表
- 在表中插入行
- 更新表中的行
- 刪除表中的行
- 刪除表
代碼結構如下:

(筆者提示:如果你也用的是Windows平台,可以安裝一個工具叫DB Browser for SQLite,可以查看數據庫文件里面的表結構和數據,非常方便)

SQLite3的使用,sqlite3_create.py的代碼如下:
1 #!/usr/bin/python 2 import sqlite3 3 4 conn = sqlite3.connect('test.sqlite') 5 6 print "opened database successfully" 7 conn.execute("drop table COMPANY") 8 9 conn.execute('''CREATE TABLE COMPANY 10 (ID INT PRIMARY KEY NOT NULL, 11 NAME TEXT NOT NULL, 12 AGE INT NOT NULL, 13 ADDRESS CHAR(50), 14 SALARY REAL);''') 15 16 print "Table created successfully" 17 18 conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ 19 VALUES (1, 'Paul', 32, 'California', 20000.00 )") 20 21 conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ 22 VALUES (2, 'Allen', 25, 'Texas', 15000.00 )") 23 24 conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ 25 VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )") 26 27 conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ 28 VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 )") 29 30 conn.commit() 31 conn.close()
從已有的的test.sqlite 文件中,讀取數據,sqlite3_select.py的代碼如下:
1 #!/usr/bin/python 2 # -*- coding: utf-8 -*- 3 import sqlite3 4 5 conn = sqlite3.connect('test.sqlite') 6 7 print "opened database successfully" 8 9 cur = conn.cursor() 10 11 cur.execute("SELECT id,name,age FROM COMPANY;") 12 13 14 for item in cur.fetchall(): 15 print item 16 17 conn.commit() 18 conn.close()
