python就內建了sqlite3,所以,在python中使用sqlite,不需要安裝任何東西,直接使用。
在使用sqlite前,我們先要搞清楚幾個概念:
表是資料庫中存放關係資料的集合,乙個資料庫裡面通常都包含多個表,比如學生的表,班級的表,學校的表,等等。表和表之間通過外來鍵關聯。
要操作關聯式資料庫,首先需要連線到資料庫,乙個資料庫連線稱為connection;
連線到資料庫後,需要開啟游標,稱之為cursor,通過cursor執行sql語句,然後,獲得執行結果。
python定義了一套運算元據庫的api介面,任何資料庫要連線到python,只需要提供符合python標準的資料庫驅動即可。
由於sqlite的驅動內建在python標準庫中,所以我們可以直接來操作sqlite資料庫。
我們在python互動式命令列實踐一下:
# 匯入sqlite驅動:
>>> import sqlite3
# 連線到sqlite資料庫
# 資料庫檔案是test.db
# 如果檔案不存在,會自動在當前目錄建立:
>>> conn = sqlite3.connect('test.db')
# 建立乙個cursor:
>>> cursor = conn.cursor()
# 執行一條sql語句,建立user表:
>>> cursor.execute('create table user (id varchar(20) primary key, name varchar(20))')
0x10f8aa260>
# 繼續執行一條sql語句,插入一條記錄:
>>> cursor.execute('insert into user (id, name) values (\'1\', \'michael\')')
0x10f8aa260>
# 通過rowcount獲得插入的行數:
>>> cursor.rowcount
1# 關閉cursor:
>>> cursor.close()
# 提交事務:
>>> conn.commit()
# 關閉connection:
>>> conn.close()
我們再試試查詢記錄:
>>> conn = sqlite3.connect('test.db')
>>> cursor = conn.cursor()
# 執行查詢語句:
>>> cursor.execute('select * from user where id=?', ('1',))
0x10f8aa340>
# 獲得查詢結果集:
>>> values = cursor.fetchall()
>>> values
[('1', 'michael')]
>>> cursor.close()
>>> conn.close()
使用python的db-api時,只要搞清楚connection
和cursor
物件,開啟後一定記得關閉,就可以放心地使用。
使用cursor
物件執行insert
,update
,delete
語句時,執行結果由rowcount
返回影響的行數,就可以拿到執行結果。
使用cursor
物件執行select
語句時,通過featchall()
可以拿到結果集。結果集是乙個list,每個元素都是乙個tuple,對應一行記錄。
如果sql語句帶有引數,那麼需要把引數按照位置傳遞給execute()
方法,有幾個?
佔位符就必須對應幾個引數,例如:
cursor.execute('select * from user where name=? and pwd=?', ('abc', 'password'))
sqlite支援常見的標準sql語句以及幾種常見的資料型別。具體文件請參閱sqlite官方**。
在python中運算元據庫時,要先導入資料庫對應的驅動,然後,通過connection
物件和cursor
物件運算元據。
要確保開啟的connection
物件和cursor
物件都正確地被關閉,否則,資源就會洩露。
如何才能確保出錯的情況下也關閉掉connection
物件和cursor
物件呢?請回憶try:...except:...finally:...
的用法。
Python學習筆記 Python之集合set
1.什麼是set集合 set集合 無序的並且是不重複的,如下 s set a b c 2.set集合訪問 訪問set集合中的元素,使用 in 操作符判斷,如下 s set a b c print c in s print d in s結果如下 true false3.set集合遍歷 使用 for 迴...
effective c 4 8學習筆記
原因 賦值與初始化 classa a a const int n a a const int n x n y n c 規定,物件成員變數的初始化動作發生在進入建構函式本體之前。編譯器總是會為使用者自定義型別之成員變數自動呼叫預設建構函式 如果在成員初值列中沒有被指定初值。為了避免漏掉某些必須初值的成...
java學習筆記48 abstract修飾符
abstract修飾符可以用來修飾方法也可以修飾類,如果修飾方法,那麼該方法就是抽象方法 如果修飾類,那麼該類就是抽象類。1 抽象類和抽象方法的關係 抽象類中可以沒有抽象方法,但是有抽象方法的類一定要宣告為抽象類。2 語法 public abstract class action public vo...