数据库应用程序示例:
基于USDA的营养数据实验室提供的数据:https://www.ars.usda.gov/nutrientdata 点击下面的链接
点击download链接, 下载标题为Abbreviated下方的ASCII链接所指向的ASCCII格式的zip文件,取里面的ABBREV.txt文本文件,该文件数据每一行都有一个数据记录,字段以脱字符(^)进行分割, 数字字段直接包含数字,而文本字段包括波浪号(~)括起来的字符串值
将数据导入数据库:
#coding: utf-8
'''
Created on 2017年8月20日
@author: Leoi
'''
#importdata.py
import sqlite3
#convert将每一行分解为多个字段
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() #创建一个光标conne.cursor()
try:
curs.execute('''
CREATE TABLE food(
id TEXT PRIMARY KEY,
desc TEXT,
water FLOAT,
kcal FLOAT,
protein FLOAT,
fat FLOAT,
ash FLOAT,
carbs FLOAT,
fiber FLOAT,
sugar FLOAT
)
''')
except:
pass
query = 'INSERT INTO food VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'
for line in open(r'C:\Users\Leoi\Desktop\python code\ABBREV.txt'):
fields = line.split('^')
vals = [convert(f) for f in fields[:10]] #此处修改为10,因为每个表有10个数据
curs.execute(query, vals) #执行sql的INSERT语句将文本字段中的值插入到数据库中
conn.commit()
conn.close()
对数据库进行查询:
#coding: utf-8
#food_query.py
import sqlite3, sys
conn = sqlite3.connect('food.db')
curs = conn.cursor() #游标,用于执行查询和检查结果
query = 'SELECT * FROM food WHERE %s' % 'kcal <= 100 AND fiber >=10'
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
print
将书上的sys.argv[1]改为了kcal <= 100 AND fiber >=10或其他sql查询条件,不用命令行的形式运行,该程序为一次性程序。