python sqlite資料庫是一款非常小巧的嵌入式開源資料庫軟體,也就是說沒有獨立的維護程序,所有的維護都來自於程式本身。它使用乙個檔案儲存整個資料庫,操作十分方便。它的最大優點是使用方便,功能相比於其它大型資料庫來說,確實有些差距。但是效能表現上,sqlite並不遜色。麻雀雖小,五臟俱全, sqlite 實現了多數 sql-92 的標準,比如說 transaction 、 trigger 和複雜的查詢等。
python的資料庫模組有統一的介面標準,所以資料庫操作都有統一的模式,基本上都是下面幾步(假設資料庫模組名為db):
1. 用db.connect建立資料庫連線,假設連線物件為conn
2. 如果該資料庫操作不需要返回結果,就直接用conn.execute查詢,根據資料庫事務隔離級別的不同,可能修改資料庫需要conn.commit
3. 如果需要返回查詢結果則用conn.cursor建立游標物件cur, 通過cur.execute查詢資料庫,用cur.fetchall/cur.fetchone/cur.fetchmany返回查詢結果。根據資料庫事 務隔離級別的不同,可能修改資料庫需要conn.commit
4. 關閉cur, conn
下面讓我們一步步走進python中的sqlite吧。
一,python sqlite資料庫匯入模組:
import sqlite3
二,建立資料庫/開啟資料庫:
cx = sqlite3.connect("e:/test.db") 其實我們不需要顯式的建立乙個sqlite資料庫,在呼叫connect函式的時候,指定庫名稱,如果指定的資料庫存在就直接開啟這個資料庫,如果不存在就新建立乙個再開啟。這一點應用很好理解。
三,資料庫連線物件:
開啟資料庫時返回的物件cx就是乙個資料庫連線物件,它可以有以下操作:
commit()--事務提交 rollback()--事務回滾 close()--關閉乙個資料庫連線 cursor()--建立乙個游標
四,python sqlite資料庫游標的使用:
游標提供了一種對從表中檢索出的資料進行操作的靈活手段,就本質而言,游標實際上是一種能從包括多條資料記錄的結果集中每次提取一條記錄的機制。游標總是與一條sql 選擇語句相關聯。因為游標由結果集(可以是零條、一條或由相關的選擇語句檢索出的多條記錄)和結果集中指向特定記錄的游標位置組成。當決定對結果集進行處理時,必須宣告乙個指向該結果集的游標。如果曾經用 c 語言寫過對檔案進行處理的程式,那麼游標就像您開啟檔案所得到的檔案控制代碼一樣,只要檔案開啟成功, 該檔案控制代碼就可代表該檔案。對於游標而言,其道理是相同的。可見光標能夠實現按與傳統程式讀取平面檔案類似的方式處理來自基礎表的結果集,從而把表中資料以平面檔案的形式呈現給程式。
我們知道關聯式資料庫管理系統實質是面向集合的,在sqlite中並沒有一種描述表中單一記錄的表達形式,除非使用where 子句來限制只有一條記錄被選中。因此我們必須借助於游標來進行面向單條記錄的資料處理。由此可見,游標允許應用程式對查詢語句select 返回的行結果集中每一行進行相同或不同的操作,而不是一次對整個結果集進行同一種操作;它還提供對基於游標位置而對錶中資料進行刪除或更新的能力;正是游標把作為面向集合的資料庫管理系統和面向行的程式設計兩者聯絡起來,使兩個資料處理方式能夠進行溝通。
下面著重闡述
cursor游標的使用。其實,所有sql語句的執行都要在游標物件下進行。
首先,定義乙個游標:
cu = cx.cursor() 這樣定義了乙個游標。游標物件有以下的操作:
execute()--執行sql語句 executemany--執行多條sql語句 close()--關閉游標 fetchone()--從結果中取一條記錄,並將游標指向下一條記錄 fetchmany()--從結果中取多條記錄 fetchall()--從結果中取出所有記錄 scroll()--游標滾動 下面就使用python sqlite資料庫中游標對我們上面建立的資料庫作一些操作吧:
1,建表:
cu.execute('create table catalog (id integer primary key,pid integer,name varchar(10) unique)') 上面語句建立了乙個叫catalog的表,它有乙個主鍵id,乙個pid,和乙個name,name是不可以重複的。
2,插入資料:
cu.execute("insert into catalog values(0, 0, 'name1')") cu.execute("insert into catalog values(1, 0, 'hello')") 簡單的插入兩行資料,不過需要提醒的是,只有提交了之後,才能生效.我們使用資料庫連線物件cx來進行提交commit和回滾rollback操作.
cx.commit()
3,查詢:
cu.execute("select * from catalog") 要提取查詢到的資料,使用游標的fetch***函式,如:
print cu.fetchall() 返回結果如下:
[(0, 0, u'name1'), (1, 0, u'hello')] 如果我們使用cu.fetchone(),則首先返回列表中的第一項,再次使用,則返回第二項,依次下去.
4,修改:
cu.execute("update catalog set name='name2' where id = 0")
cx.commit() 注意,修改資料以後提交
5,刪除:
cu.execute("delete from catalog where id = 1") cx.commit() 以上簡單的操作反應的python sqlite資料庫操作的基本要點,這裡點到為止.然後,sqlite的強大,並不僅限於此,其對sql高階特性的支援及其小巧靈活的特點,使得sqlite在眾多領域受到開發者的青睞.
舉例:
exemplary exemplar 1
import sqlite3
cur.execute('select * from foo')
print cur.fetchall()
exemplary exemplar 2
#-*- encoding:gb2312 -*-
import sqlite3
conn = sqlite3.connect("d:/aaa.db")
conn.isolation_level = none #這個就是事務隔離級別,預設是需要自己commit才能修改資料庫,置為none則自動每次修改都提交,否則為""
# 下面就是建立乙個表
conn.execute("create table if not exists t1(id integer primary key autoincrement, name varchar(128), info varchar(128))")
# 插入資料
conn.execute("insert into t1(name,info) values ('zhaowei', 'only a test')")
# 如果隔離級別不是自動提交就需要手動執行commit
conn.commit()
# 獲取到游標物件
cur = conn.cursor()
# 用游標來查詢就可以獲取到結果
cur.execute("select * from t1")
# 獲取所有結果
res = cur.fetchall()
print 'row:', cur.rowcount
# cur.description是對這個表結構的描述
print 'desc', cur.description
# 用fetchall返回的結果是乙個二維的列表
for line in res:
for f in line:
print f,
print '-'*60
cur.execute("select * from t1")
# 這次查詢後只取乙個結果,就是一維列表
res = cur.fetchone()
print 'row:', cur.rowcount
for f in res:
print f,
# 再取一行
res = cur.fetchone()
print 'row:', cur.rowcount
for f in res:
print f,
print '-'*60
cur.close()
conn.close()
python之sqlite3使用詳解
如果該資料庫操作不需要返回結果,就直接用conn.execute查詢,根據資料庫事務隔離級別的不同,可能修改資料庫需要conn.commit 如果需要返回查詢結果則用conn.cursor建立游標物件cur,通過cur.execute查詢資料庫,用cur.fetchall cur.fetchone ...
使用sqlite3 模組操作sqlite3資料庫
python內建了sqlite3模組,可以操作流行的嵌入式資料庫sqlite3。如果看了我前面的使用 pymysql 操作mysql資料庫這篇文章就更簡單了。因為它們都遵循pep 249,所以操作方法幾乎相同。廢話就不多說了,直接看 吧。都差不多,首先匯入模組,然後建立連線,然後獲取游標物件,之後利...
Python之sqlite3資料庫
關於splite3的知識,可以參考 鏈結 import sqlite3 import os path os.getcwd conn sqlite3.connect path db.db cur conn.cursor 我們以快 的ip位址作為儲存物件 import pandas as pd url ...