python之資料庫操作 sqlite

2022-03-31 04:18:14 字數 4728 閱讀 2437

關於sqlite

不像常見的客戶端/伺服器結構範例,sqlite引擎不是個程式與之通訊的獨立程序,而是連線到程式中成為它的乙個主要部分。所以主要的通訊協議是在程式語言內的直接api呼叫。這在消耗總量、延遲時間和整體簡單性上有積極的作用。整個資料庫(定義、表、索引和資料本身)都在宿主主機上儲存在乙個單一的檔案中。相比其它大型資料庫來說,確實有些差距。但是包括事務(transaction),就是代表原子性、一致性、隔離性和永續性的(acid),觸發器(trigger)和多數的複雜查詢都是支援的。另外,在於語言上繫結也是十分出色:包含了php,python,c/c++等等。

更多資訊請參看:

在python使用sqlite3

(以下資訊摘至:

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,close()

一 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語句   

xecutemany--執行多條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()

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()

資料庫操作sql

一 資料庫的建立 1 建立乙個名稱為mydb1的資料庫 create database mydb1 2 建立乙個使用utf8字符集的mydb2資料庫。create database mydb2 character set utf8 3 建立乙個使用utf8字符集,並帶比較規則的mydb3資料庫。cr...

Python學習之資料庫操作

在python中,我們可以通過mysqldb這一介面卡連線並運算元據庫。其中有兩個主要的物件connection和cursor,分別用來與資料庫連線和通訊。下面給出乙個與資料庫連線的例項 conn mysqldb.connect host 127.0.0.1 主機名 127.0.0.1 為本機ip ...

資料庫之Python操作MySQL

python操作mysql一共有兩種方式,第一種是用原生模組pymysql和mysqldb,這兩種模組在py2中都支援,但是在py3中只支援pymysql,但是pymysql可以通過pymysql.install as mysqldb 的方式構造成和mysqldb一樣的使用 第二種方式是orm框架 ...