web.py 存储对象无法访问值
web.py storage object can't access value
我使用 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”?
您有一个包含一个元素的列表,该元素属于 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
我使用 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”?
您有一个包含一个元素的列表,该元素属于 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