正確連接Python數(shù)據(jù)庫說明
Python數(shù)據(jù)庫只需要使用它的encode,decode,encodestring,decodestring就可以了,前面兩個是對文件進行編解碼的(也可以對StringIO中的數(shù)據(jù)編碼解碼),后面兩個是對字符串進行編碼解碼的。
windows版本的python2.5已經(jīng)自帶了sqlite3這個模塊,是可以直接使用的。Python數(shù)據(jù)庫模塊有統(tǒng)一的接口標準,所以數(shù)據(jù)庫操作都有統(tǒng)一的模式,基本上都是下面幾步(假設(shè)數(shù)據(jù)庫模塊名為db):
1. 用db.connect創(chuàng)建數(shù)據(jù)庫連接,假設(shè)連接對象為Python數(shù)據(jù)庫
2. 如果該數(shù)據(jù)庫操作不需要返回結(jié)果,就直接用conn.execute查詢,根據(jù)數(shù)據(jù)庫事務隔離級別的不同,可能修改數(shù)據(jù)庫需要conn.commit
3. 如果需要返回查詢結(jié)果則用conn.cursor創(chuàng)建游標對象cur, 通過cur.execute查詢數(shù)據(jù)庫,用cur.fetchall/cur.fetchone/cur.fetchmany返回查詢結(jié)果。根據(jù)數(shù)據(jù)庫事務隔離級別的不同,可能修改數(shù)據(jù)庫需要conn.commit
4. 關(guān)閉cur, conn
sqlite3模塊也不例外,看看下面的例子:
- #-*- encoding:gb2312 -*-
- import sqlite3
- conn = sqlite3.connect("D:\aaa.db")
- conn.isolation_level = None #這個就是事務隔離級別,默認是需要自己commit才能修改數(shù)據(jù)庫,置為None則自動每次修改都提交,否則為""
- # 下面就是創(chuàng)建一個表
- conn.execute("create table if not exists t1(id integer primary key autoincrement, name varchar(128), info varchar(128))")
- # 插入數(shù)據(jù)
- conn.execute("insert into t1(name,info) values ('zhaowei', 'only a test')")
- # 如果隔離級別不是自動提交就需要手動執(zhí)行commit
- conn.commit()
- # 獲取到游標對象
- cur = conn.cursor()
- # 用游標來查詢就可以獲取到結(jié)果
- cur.execute("select * from t1")
- # 獲取所有結(jié)果
- res = cur.fetchall()
- print 'row:', cur.rowcount
- # cur.description是對這個表結(jié)構(gòu)的描述
- print 'desc', cur.description
- # 用fetchall返回的結(jié)果是一個二維的列表
- for line in res:
- for f in line:
- print f,
- print '-'*60
- cur.execute("select * from t1")
- # 這次查詢后只取一個結(jié)果,就是一維列表
- 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()
【編輯推薦】