python用sqlite3模塊操作sqlite數據庫

ybw8 9年前發布 | 33K 次閱讀 SQLite3 SQLite 數據庫服務器

 SQLite是一個包含在C庫中的輕量級數據庫。它并不需要獨立的維護進程,并且允許使用非標準變體(nonstandard variant)的SQL查詢語句來訪問數據庫。

一些應用可是使用SQLite保存內部數據。它也可以在構建應用原型的時候使用,以便于以后轉移到更大型的數據庫。

SQLite的主要優點:

1. 一致性的文件格式:

在SQLite的官方文檔中是這樣解釋的,我們不要將SQLite與Oracle或PostgreSQL去比較,與我們自定義格式的數據文件相比,SQLite不僅提供了很好的

移植性,如大端小端、32/64位等平臺相關問題,而且還提供了數據訪問的高效性,如基于某些信息建立索引,從而提高訪問或排序該類數據的性能,SQLite提供的事務功能,也是在操作普通文件時無法有效保證的。

 

2. 在嵌入式或移動設備上的應用:

由于SQLite在運行時占用的資源較少,而且無需任何管理開銷,因此對于PDA、智能手機等

移動設備來說,SQLite的優勢毋庸置疑。

 

3. 內部數據庫:

在有些應用場景中,我們需要為插入到數據庫服務器中的數據進行數據過濾或數據清理,以保證最終插入到數據庫服務器中的數據有效性。有的時候,數據是否有效,不能通過單一一條記錄來進行判斷,而是需要和之前一小段時間的歷史數據進行特殊的計算,再通過計算的結果判斷當前的數據是否合法。

在這種應用中,我們可以用SQLite緩沖這部分歷史數據。還有一種簡單的場景也適用于SQLite,即統計數據的預計算。比如我們正在運行數據實時采集的服務程序,我們可能需要將每10秒的數據匯總后,形成每小時的統計數據,該統計數據可以極大的減少用戶查詢時的數據量,從而大幅提高前端程序的查詢效率。在這種應用中,我們可以將1小時內的采集數據均緩存在SQLite中,在達到整點時,計算緩存數據后清空該數據。

 

4. 數據分析:

可以充分利用SQLite提供SQL特征,完成簡單的數據統計分析的功能。這一點是yaml,csv文件無法比擬的。

 

用我的話來說,他很小,很適合做臨時的數據庫,遷移數據很簡單,直接傳遞文件就可以了。 其實我一開是是選用leveldb的,但是他的特性像nosql,一些稍微復雜的查詢,就有些麻煩了。  

1、創建一個新的數據庫:sqlite3     文件名

這個test.db 存放著所有的數據。

sqlite3  rui.db

 

2、打開一個已經存在的數據庫:sqlite3      已經存在的文件名

創建一個新數據庫和打開一個已經存在的數據庫命令是一模一樣的,如果文件在當前目錄下不存在,則新建;如果存在,則打開。

 

3、導入數據:.read     數據文件

打開記事本,并將下列 SQL 語句復制到記事本中,保存為 test.sql 到上面說到的 Db 目錄下,在命令行環境中輸入

.read   test.sql

即將所有的數據導入到 rui.db 數據庫中。

 4、列出所有的數據表: .tables

完成上面所有的工作以后,我們就可以列出所有的數據表了

[root@devops-ruifengyun /tmp ]$ sqlite3 rui.db 
SQLite version 3.7.17 2013-05-20 00:56:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables
ceshi  tbl1 
sqlite> 
sqlite>

5、顯示數據庫結構:.schema

其實就是一些 SQL 語句,他們描述了數據庫的結構,如圖

sqlite> .schema
CREATE TABLE tbl1(one varchar(10), two smallint);
CREATE TABLE ceshi (user text, note text);

6、顯示表的結構:.schema    表名

sqlite> .schema ceshi
CREATE TABLE ceshi (user text, note text)

7、導出某個表的數據: .dump    表名

sqlite> .dump tbl1
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE tbl1(one varchar(10), two smallint);
INSERT INTO "tbl1" VALUES('goodbye',20);
INSERT INTO "tbl1" VALUES('hello!',10);
COMMIT;

再來講解下python sqlite3的用法,其實和mysqldb很像吧,他的語法和mysql差不多

import sqlite3
#原文: xiaorui.cc 
#鏈接數據庫文,sqlite都是以文件的形式存在的。
#如果數據庫文件不存在,回新建一個,如果存在則打開此文件
conn = sqlite3.connect('example')
c = conn.cursor()
#創建table
c.execute('''create table ceshi (user text, note text)''')
  
# 插入數據,執行SQL語句
c.execute('''insert into ceshi (user,note)  values('mPfiJRIH9T','mPfiJRIH9T')''')
c.execute('''insert into ceshi (user,note)  values('7IYcUrKWbw','7IYcUrKWbw')''')
c.execute('''insert into ceshi (user,note)  values('bXB9VcPdnq','bXB9VcPdnq')''')
c.execute('''insert into ceshi (user,note)  values('2JFk7EWcCz','2JFk7EWcCz')''')
c.execute('''insert into ceshi (user,note)  values('QeBFAlYdPr','QeBFAlYdPr')''')
c.execute('''insert into ceshi (user,note)  values('bDL4T69rsj','bDL4T69rsj')''')
c.execute('''insert into ceshi (user,note)  values('BOxPqmkEd9','BOxPqmkEd9')''')
c.execute('''insert into ceshi (user,note)  values('rvBegjXs16','rvBegjXs16')''')
c.execute('''insert into ceshi (user,note)  values('CWrhA2eSmQ','CWrhA2eSmQ')''')
c.execute('''insert into ceshi (user,note)  values('qQicfV2gvG','qQicfV2gvG')''')
c.execute('''insert into ceshi (user,note)  values('s3vg1EuBQb','s3vg1EuBQb')''')
c.execute('''insert into ceshi (user,note)  values('Lne4xj3Xpc','Lne4xj3Xpc')''')
c.execute('''insert into ceshi (user,note)  values('PH3R86CKDT','PH3R86CKDT')''')
c.execute('''insert into ceshi (user,note)  values('HEK7Ymg0Bw','HEK7Ymg0Bw')''')
c.execute('''insert into ceshi (user,note)  values('lim2OCxhQp','lim2OCxhQp')''')
c.execute('''insert into ceshi (user,note)  values('kVFfLljBJI','kVFfLljBJI')''')
c.execute('''insert into ceshi (user,note)  values('Hpbs3VOXNq','Hpbs3VOXNq')''')
c.execute('''insert into ceshi (user,note)  values('f5ubmznBIE','f5ubmznBIE')''')
c.execute('''insert into ceshi (user,note)  values('beJCQA2oXV','beJCQA2oXV')''')
c.execute('''insert into ceshi (user,note)  values('JyPx0iTBGV','JyPx0iTBGV')''')
c.execute('''insert into ceshi (user,note)  values('4S7RQTqw2A','4S7RQTqw2A')''')
c.execute('''insert into ceshi (user,note)  values('ypDgkKi27e','ypDgkKi27e')''')
c.execute('''insert into ceshi (user,note)  values('Anrwx8SbIk','Anrwx8SbIk')''')
c.execute('''insert into ceshi (user,note)  values('k5ZJFrd8am','k5ZJFrd8am')''')
c.execute('''insert into ceshi (user,note)  values('KYcTv54QVC','KYcTv54QVC')''')
c.execute('''insert into ceshi (user,note)  values('Jv6OyfMA0g','Jv6OyfMA0g')''')
c.execute('''insert into ceshi (user,note)  values('kpSLsQYzuV','kpSLsQYzuV')''')
c.execute('''insert into ceshi (user,note)  values('u2zkJQWdOY','u2zkJQWdOY')''')
c.execute('''insert into ceshi (user,note)  values('D0aspFbW8c','D0aspFbW8c')''')
c.execute('''insert into ceshi (user,note)  values('CwqhvDOrWZ','CwqhvDOrWZ')''')
c.execute('''insert into ceshi (user,note)  values('Tdy5LA9sWO','Tdy5LA9sWO')''')
c.execute('''insert into ceshi (user,note)  values('76HnRVbLX0','76HnRVbLX0')''')
c.execute('''insert into ceshi (user,note)  values('B3aoFibRPV','B3aoFibRPV')''')
c.execute('''insert into ceshi (user,note)  values('7Q6lNdL5JP','7Q6lNdL5JP')''')
c.execute('''insert into ceshi (user,note)  values('Hsob6Jyv4A','Hsob6Jyv4A')''')
#將變動保存到數據庫文件,如果沒有執行詞語句,則前面的insert 語句操作不會被保存
conn.commit()
c.execute('''select * from ceshi ''').fetchall()
#得到所有的記錄
rec = c.execute('''select * from ceshi''')
print c.fetchall()


 本文由用戶 ybw8 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!