咦咦意呀啊~~(笑傲江湖主题曲)
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
命令行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