使用的数据库。这比你想象的要容易。
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