web.py存储对象无法访问值

时间:2015-12-23 11:48:03

标签: python web.py

我使用web.py执行此sql查询

db.query('SELECT EXISTS(SELECT 1 FROM episodes WHERE changed > $date LIMIT 1)', vars={'date':date})

结果是

[<Storage {'EXISTS(SELECT 1 FROM episodes WHERE changed > ? LIMIT 1)': 1}>]

理论上我知道如何将这些存储对象转换为列表。但每次尝试我都会失去“1”的值。 尝试[0]会导致['EXISTS(SELECT 1 FROM episodes WHERE changed > ? LIMIT 1)']没有值。 [1]超出范围。

如何访问“1”?

1 个答案:

答案 0 :(得分:2)

您有一个包含一个元素的列表,其类型为Storage,并且包含查询结果。 Storage实例类似于字典(类型dict),其额外功能是使密钥也可作为属性访问。当然只要密钥是合法的属性名称EXISTS(SELECT 1 FROM episodes WHERE changed > ? LIMIT 1)不是。所以你必须像普通字典一样使用它:

# Prints: 1
print result[0]['EXISTS(SELECT 1 FROM episodes WHERE changed > ? LIMIT 1)']

这有点长,所以你可以考虑在SQL查询中给结果列一个别名(LIMIT 1是不必要的,因为它隐含在EXISTS中):

db.query('SELECT EXISTS(SELECT 1 FROM episodes WHERE changed > $date) has_changed_after_date', vars={'date': date})
# ...
print result[0]['has_changed_after_date']
# or
print result[0].has_changed_after_date