一到数据库,眼睛总是亮闪闪

本文介绍了一种使用Python的SQLite3模块来处理食品营养数据的方法。通过从文本文件中读取数据,并将其转换为适合数据库存储的形式,然后创建了一个名为'food.db'的数据库及其中的'food'表,用于存储包括食品ID、描述、水份含量等在内的十项营养指标。此外,还提供了一个命令行工具用于查询这些数据。

咦咦意呀啊~~(笑傲江湖主题曲)

import sqlite3

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()    #看到好多次游标,第一次意识到自己用上了...

field_count = 10    #下面建个表,靠游标画
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
)
''')
query = 'INSERT INTO food VALUES (?,?,?,?,?,?,?,?,?,?)' #各种问号就是占位符

for line in open('ABBREV.txt'): #某营养网站:https://www.ars.usda.gov/northeast-area/beltsville-md/beltsville-human-nutrition-research-center/nutrient-data-laboratory/docs/usda-national-nutrient-database-for-standard-reference/
    fields = line.split('^') #分隔符'^'
    vals = [convert(f) for f in fields[:field_count]] #每行各个值变出来放在list里面
    curs.execute(query,vals) #十个问号对应十个列表里面的元素。微观动作就是靠游标一个个填入。

conn.commit() #都执行完了执行提交并关闭。
conn.close

sqliteman

命令行query db,
这里写图片描述

query_food.db,

import sqlite3, sys

conn = sqlite3.connect('food.db')
curs = conn.cursor() #游标又来了

query = 'SELECT * FROM food WHERE %s' %sys.argv[1] 
print query

curs.execute(query)
names = [f[0] for f in curs.description] #列名就这么拿下了。
for row in curs.fetchall():#游标是一次全拿下的
    for pair in zip(names,row): #据说Zip就是把不同list粘起来,返回一个tuple:http://www.cnblogs.com/frydsh/archive/2012/07/10/2585370.html
        print '%s:%s' %pair #这个其实也很tricky哦,两个各string 直接pair就搞定了,还认识:。
    print
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

取啥都被占用

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值