11. food_query.py python数据库查询

# -*- coding: cp936 -*-
import sqlite3,sys


#建立数据库的连接及其游标
conn = sqlite3.connect('food.db')
curs = conn.cursor()


#查询
query = 'SELECT * FROM food WHERE %s' % 'kcal <=100 AND fiber >= 10 ORDER BY sugar'
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


对于这个程序,我有几个问题

1. 原程序query = 'SELECT * FROM food WHERE %s' % 'kcal <=100 AND fiber >= 10 ORDER BY sugar'这行写的是query = 'SELECT * FROM food WHERE %s' % sys.argv[1],我最开始直接run程序,就出现了indexerror: list index out of range。出现这个的问题在于sys.argv[1]没有赋值。

语句$ python food_query 'kcal <=100 AND fiber >= 10 ORDER BY sugar',给sys.argv[1]赋值为'kcal <=100 AND fiber >= 10 ORDER BY sugar'。这样赋值的目的是为了便于修改查询条件,不用每次修改条件都要重写py文档,只需要在执行py的时候赋相应的值。但是$ python貌似是cmd命令啊,在python shell中无法执行。所以我只好把sys.argv[1]直接在py文档中修改成它将要赋的值:'kcal <=100 AND fiber >= 10 ORDER BY sugar'。


python传递参数只能用命令行么?求解。要想在shell里面直接传参数要怎么做?

解答: python 要给argv传递参数貌似还真只能用cmd命令行;上面那张图出现问题的原因在于python文件中字符串用单引号,但是命令行中是要用双引号的,改成双引号上述问题就解决了。


2. names = [f[0] for f in curs.description] 这句,打印出来的names显示为['id', 'desc', 'water', 'kcal', 'protein', 'fat', 'ash', 'carbs', 'fiber', 'sugar']

而curs.description打印显示为

('id', None, None, None, None, None, None)
('desc', None, None, None, None, None, None)
('water', None, None, None, None, None, None)
('kcal', None, None, None, None, None, None)
('protein', None, None, None, None, None, None)
('fat', None, None, None, None, None, None)
('ash', None, None, None, None, None, None)
('carbs', None, None, None, None, None, None)
('fiber', None, None, None, None, None, None)
('sugar', None, None, None, None, None, None)

为什么会是这样?


3. for row in curs.fetchall(): 这句。curs游标fetch到的row为什么不带id,  desc, water这些指标,只有纯数字?


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值