python之資料庫支援
13.1.1 全域性變數
任何支援2.0版本DB API的資料庫模組都必須定義3個描述模組特性的全域性變數。這樣做的原因時API設計的很靈活,以支援不同的基礎機制、避免過多包裝,可如果想讓程式同時應用於幾個資料庫,那可是件麻煩事了,因為需要考慮到各種可能出現的狀況。
變數名 用途
apilevel 所使用的python DB API版本
threadsafety 模組的執行緒安全等級
paramstyle 在SQL查詢中使用的引數風格
API級別是個字串常量,提供正在使用的API版本號。
執行緒安全性等級是個取值範圍0~3的整數。0表示執行緒完全不共享模組,而3表示模組是安全執行緒安全的。1表示執行緒本身可以共享模組,但不對連線共享。如果不使用多個執行緒,那麼完全不用擔心這個變數。
引數風格表示執行多次類似查詢的時候,引數是如何被拼接到SQL查詢中的。
13.1.2 異常
為了能儘可能準確的處理錯誤,API中定義了一些異常類。它們被定義在一種層次結構中,所以可以通過一個except塊捕捉多種異常。
13.1.3 連線和遊標
為了使用基礎資料庫系統,首先必須連線到它。這個時候需要使用具有恰當名稱的connect函式,該函式有很多引數,而具體使用哪個引數取決於資料庫。
connect函式的常用引數
dsn 資料來源名稱,給出該參數列示資料庫依賴
user 使用者名稱
password 使用者密碼
host 主機名
database 資料庫名
connect函式返回連線物件,這個物件表示目前和資料庫的會話。
連線物件方法
close() 關閉連線之後,連線物件和它的遊標均不可用
commit() 如果支援的話就提交掛起的事務,否則不做任何事
rollback() 回滾掛起的事務(可能不可用)
cursor() 返回連線的遊標物件
cursor方法將我們引入另外一個主題:遊標物件。通過遊標執行sql查詢並檢查結果。遊標比連線支援更多的方法。
13.1.4 型別
資料庫對插入到具有某種型別的列中的值有不同的要求,是為了能正確地與基礎sql資料庫進行互動操作,DB API定義了用於特殊型別和值的建構函式及常量。
13.2.1 入門
這裡以SQLite資料庫作為示例。
將SQLite作為名為sqlite3的模組匯入。之後就可以建立一個到資料庫檔案的連線—-如果檔案不存在就會被建立—-通過提供一個檔名:
>>>import sqlite3
>>>conn = sqlite3.connect(`somedatabase.db`)
之後就能獲得連線的遊標:
>>>curs = conn.cursor()
這個遊標可以用來執行sql查詢,完成查詢並且做出某些更改後確保已經進行了提交,這樣才可以將這些修改真正的儲存到檔案中:
>>>conn.commit()
可以在每次修改資料庫後都進行提交,而不是僅僅在準備關閉時才提交,準備關閉資料庫時,使用close方法:
>>>conn.close()
13.2.2 資料庫應用程式示例
1.建立和填充表
為了真正地建立資料庫表並且向其中插入資料,寫個完全獨立的一次程式可能是最簡單的方案。
下面程式建立了叫做food的表和適當的欄位,並且從ABBREV.txt中讀取資料。之後分解析,然後通過呼叫curs.execute執行SQL的INSERT語句將文字欄位中的值插入到資料庫中。
將資料匯入資料庫
import sqlite3
def convert(value)
if value.startswith(`~`):
return value.strip(`~`)
if not value:
value = `0`
return float(value)
conn = sqlite3.connect(`food.db`)
curs = conn.cursor()
curs.execute(“`
CREATE TABLE food (
id TEXT PRIMARY KEY,
desc TEXT,
water FLOAT,
kcal FLOAT,
ash FLOAT,
fiber FLOAT
)
“`)
query = `INSERT INTO food VALUES(?,?,?,?,?,?)`
for line in open(`ABBREV.txt`):
fileds = line.split(`^`)
vals = [convert(f) for f in fileds[:filed_count]]
curs.execute(query,vals)
conn.commit()
conn.close()
當執行這個程式時,它會建立一個叫做food.db的新檔案,它包含資料庫中的所有資料。
2.搜尋和處理結果
使用資料庫很簡單。再說一次,需要建立連線並且獲得該連結的遊標。使用execute方法執行sql查詢,用fetchall等方法提取結果。
展示一個將SQL SELECT條件查詢作為命令列引數,之後按記錄格式列印出返回行的小程式。可以用下面的命令嘗試這個程式:
$python food_query.py “kcal <= 100 AND fiber >= 10 ORDER BY sugar”
執行的時候可能注意到有個問題。第一行,生橘子皮看起來不含任何糖分,這是因為在資料檔案中這個欄位丟失了。可以改進剛才的匯入指令碼檢測條件,然後插入None帶代替真實的值來表示丟失的資料。可以使用如下條件:
“kcal <= 100 AND fiber >= 10 AND sugar ORDER BY sugar”
請求在任何返回行中包含實際資料的糖分欄位。
食品資料庫查詢程式(food_query.py)
import sqlite3,sys
conn = sqlite3.connect(`food.db`)
curs = conn.cursor()
query = `SELECT * FROM food WHERE %s` % sys.argv[1]
print query
curs.execute(query)
names = [f[0] for f in curs.description]
for row in curs.fetchall():
for pair in zip(names,row):
print `%s: %s` % pair
本文轉自潘闊 51CTO部落格,原文連結:http://blog.51cto.com/pankuo/1661447,如需轉載請自行聯絡原作者
相關文章
- Python資料分析工具庫-Numpy 陣列支援庫(一)Python陣列
- Python之 操作 MySQL 資料庫PythonMySql資料庫
- Python實戰之Oracle資料庫操作PythonOracle資料庫
- Python全棧開發之—redis資料庫Python全棧Redis資料庫
- 大資料圖資料庫之TAO資料庫大資料資料庫
- Python支援哪些資料型別Python資料型別
- Oracle資料庫開啟NUMA支援Oracle資料庫
- Oracle 資料庫官方不支援VMWareOracle資料庫
- 讓Django支援多種資料庫Django資料庫
- (資料庫之pymysql)資料庫MySql
- 資料庫之DAO資料庫
- 資料庫之AR資料庫
- 國產資料庫調研之——AntDB資料庫資料庫
- 資料庫系統概述之國產資料庫資料庫
- python+資料庫(三)用python對資料庫基本操作Python資料庫
- Oracle & MySQL & PostgreSQL資料庫恢復支援OracleMySql資料庫
- Oracle 資料庫官方申明不支援VmwareOracle資料庫
- MySQL資料庫delete資料時,不支援表別名MySql資料庫delete
- python資料庫2Python資料庫
- Django資料庫效能優化之 - 使用Python集合操作Django資料庫優化Python
- 資料庫升級之-資料泵資料庫
- 探索 Python/Django 支援分散式多租戶資料庫,如 Postgres+CitusPythonDjango分散式資料庫
- python如何將資料插入資料庫Python資料庫
- 【Python】資料存放入mysql資料庫PythonMySql資料庫
- 資料庫安全之金融資料庫
- MySQL資料庫之索引MySql資料庫索引
- luffy之資料庫配置資料庫
- Go之資料庫操作Go資料庫
- 資料庫之建立索引資料庫索引
- mongoDB資料庫之聚合MongoDB資料庫
- oracle 之資料庫核查Oracle資料庫
- .NET 百萬級 大資料插入、更新 ,支援多種資料庫大資料資料庫
- 開源之夏專案分享:圖資料庫 Nebula Graph 支援 JDBC 協議資料庫JDBC協議
- Laravel 資料庫脫敏工具,僅支援 MySQLLaravel資料庫MySql
- Laravel資料庫遷移和填充(支援中文)Laravel資料庫
- BlueHost主機支援哪些資料庫型別?資料庫型別
- 使用 ISAR 資料庫提供離線 Flutter 支援資料庫Flutter
- goldengate 支援ddl的資料庫型別Go資料庫型別