使用数据库。这比你想象的要容易。
sqlite 是个不错的选择:
- 不会有额外的依赖,因为
sqlite 是 Python 自带的。
- 一个数据库将允许更容易访问更灵活
查询比嵌套字典。例如,你可以问,什么
社区的 risk_factor > 8?或者什么什么(邻里,
income, risk_factor) 元组的 APR
- 您的数据可以保存在文件中,并且采用可以读取的格式
由其他程序,甚至是用其他语言编写的程序
比 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 方法。
要找到给定社区、收入和风险因素的 apr:
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]
要根据社区、收入和风险因素更改 apr:
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()
要找出(社区、收入、风险因素)的 APR
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)