您好,登錄后才能下訂單哦!
python中怎么使用sqlite3數據庫,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
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
con = sqlite3.connect('d:/mydatabase.db3')
cur = con.cursor()
cur.execute('CREATE TABLE foo (o_id INTEGER PRIMARY KEY, fruit VARCHAR(20), veges VARCHAR(30))')
con.commit()
cur.execute('INSERT INTO foo (o_id, fruit, veges) VALUES(NULL, "apple", "broccoli")')
con.commit()
print cur.lastrowid
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
print '-'*60
cur.execute("select * from t1")
# 這次查詢后只取一個結果,就是一維列表
res = cur.fetchone()
print 'row:', cur.rowcount
for f in res:
print f,
print
# 再取一行
res = cur.fetchone()
print 'row:', cur.rowcount
for f in res:
print f,
print
print '-'*60
cur.close()
conn.close()
看完上述內容,你們掌握python中怎么使用sqlite3數據庫的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。