使用的數據庫。這比你想象的要容易。
sqlite將是一個不錯的選擇:
- 將不會有任何額外的依賴,因爲
sqlite
Python自帶。
- 數據庫將允許更容易獲得比嵌套類型的字典更加靈活 查詢。例如,你可以問,什麼 街區有risk_factor> 8?或什麼(鄰居, 收入,risk_factor)元組有APR < 0.10。
- 你的數據可以住在一個文件,並在可能被其他程序讀取 的格式,甚至用其他 比Python語言編寫的程序。
- 只要您不希望很多用戶試圖同時讀取或寫入您的數據庫 ,那麼對於此任務,sqlite應該是相當令人滿意的 。
- 的sqlite3的數據庫適配器具有excellent documentation並符合Python Database API Specification v2.0。
- SQLite可以理解的SQL語言有excellent documentation。
下面是一些例子:
要創建數據庫表:
import sqlite3
with sqlite3.connect('apr.sqlite') as connection:
cursor = connection.cursor()
cursor.execute('''CREATE TABLE aprtable
(id INTEGER PRIMARY KEY AUTOINCREMENT,
neighborhood TEXT,
income INTEGER,
risk_factor INTEGER,
apr FLOAT)''')
或者,在只讀存儲器創建數據庫:
with sqlite3.connect(':memory:') as connection:
....
將數據插入到表:
sql = 'INSERT INTO aprtable (neighborhood, income, risk_factor, apr) value (?,?,?,?)'
args = ['Brighton', 20000, 10, 0.196]
cursor.execute(sql, args)
還檢查了executemany方法。
要找到給鄰里,收入和risk_factor年利率:
sql = 'SELECT apr FROM aprtable WHERE neighborhood = ? and income = ? and risk_factor = ?'
args = ['Allston', 25000, 5]
cursor.execute(sql, args)
row = cur.fetchone()
if row is not None:
apr = row[0]
要改變給鄰里,收入和risk_factor的四月:
sql = 'UPDATE aprtable SET apr = ? WHERE neighborhood = ? and income = ? and risk_factor = ?'
args = [0.125, 'Allston', 25000, 5]
cursor.execute(sql, args)
要了解什麼鄰里有risk_factor> 8:
sql = 'SELECT neighborhoods from aprtable where risk_factor > ?'
args = [8]
cursor.execute(sql, args)
neighborhoods = cur.fetchall()
要查找(居委會,收入,risk_factor)■有APR < 0.10:
sql = 'SELECT neighborhood, income, risk_factor FROM aprtable WHERE apr < ?'
args = [0.10]
cursor.execute(sql, args)
for neighborhood, income, risk_factor in cursor:
print(neighborhood, income, risk_factor)
確實['csv.DictReader'(http://docs.python.org/library/csv.html#csv檢查四月.DictReader)看起來有用嗎? – 2013-05-03 21:38:53
爲什麼不使用元組的元組來替代?這將消除對嵌套字典的需求。 – FastTurtle 2013-05-03 21:43:40