import sqlite3
conn = sqlite3.connect('food.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS nutritional_values
(item, calories, total fat, protein)''')
items = [ ('Broccoli Chinese', 22, 0.7, 1.1),
('chia seeds', 490, 30.8, 15.6),
('blueberries', 57, 0.3, 0.7),]
c.executemany('INSERT INTO nutritional_values VALUES (?,?,?,?)',items)
c.execute('''CREATE TABLE IF NOT EXISTS food_consumption
(date, item, amount)''')
c.execute('DELETE FROM food_consumption')
consumed = [ ('24/8/2019', 'Broccoli Chinese', 1.5),
('24/8/2019', 'chia seeds', 0.35),
('24/8/2019', 'blueberries', 0.4),]
c.executemany('INSERT INTO food_consumption VALUES (?,?,?)',consumed)
conn.commit()
conn.close()
如果我跑:
for row in c.execute('SELECT * FROM food_consumption'):
print(row[1])
如我所料,我得到:
Broccoli Chinese
chia seeds
blueberries
但如果我跑了:
for row in c.execute('SELECT * FROM food_consumption'):
print(row[1])
for number in c.execute('SELECT calories FROM nutritional_values WHERE item=(?)', (row[1],)):
print(number)
我得到:
Broccoli Chinese
(22,)
所以它不再在表'food_consumption'
中的所有行上循环,如何让它在所有行上循环
游标一次只能保存一个查询的结果,您需要将第一个查询的结果保存到一个变量中:
我不清楚您当前的方法为什么不起作用,但无论如何,这是一种糟糕的设计模式,您应该在两个表之间执行连接,处理数据库端的关系:
请注意,这是处理问题的首选方法,因为它避免了将整个结果集加载到Python的内存中
相关问题 更多 >
编程相关推荐