11. food_query.py python数据库查询

来源:互联网 发布:下载免费炒股软件 编辑:程序博客网 时间:2024/06/05 06:28
# -*- 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
原创粉丝点击