您的位置:首页 > 编程语言 > Python开发

11. food_query.py python数据库查询

2015-12-10 23:32 701 查看
# -*- 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这些指标,只有纯数字?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: