使用数据库。这比你想象的要容易。
sqlite将是一个不错的选择:
sqlite
因为Python 自带,所以不会有额外的依赖。
- 与嵌套字典相比,数据库将允许更轻松地访问更灵活的查询。例如,您可能会问,哪些社区的 risk_factor > 8?或者什么 (neighborhood, income, risk_factor) 元组的 APR < 0.10。
- 您的数据可以存在于文件中,并且采用其他程序可以读取的格式,即使是用 Python 以外的语言编写的程序。
- 只要您不希望有很多用户同时尝试读取或写入您的数据库,sqlite 应该可以很好地完成这项任务。
- sqlite3 数据库适配器具有出色的文档并符合Python 数据库 API 规范 v2.0。
- SQLite 所理解的 SQL 语言具有出色的文档。
这里有些例子:
创建数据库表:
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 < 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)