当我有以下查询时:
str(db(db.items.id==int(row)).select(db.items.imageName)) + "\n"
输出包括字段名称:
items.imageName
homegear\homegear.jpg
如何删除它,以便不包含字段名称,只包括所选的图像名称。
我尝试引用它就像列表[1]给我一个超出范围的错误和[0]我最终得到:
<Row {'imageName': 'homegear\\homegear.jpg'}>
上面不是一个列表,那是什么对象以及如何引用它?
谢谢!
约翰
答案 0 :(得分:5)
db(db.items.id==int(row)).select(db.items.imageName)
会返回Rows
个对象,其__str__
方法会将其转换为CSV输出,这就是您所看到的。
Rows
对象包含Row
个对象,Row
对象包含字段值。要访问单个字段值,您必须首先索引Rows
对象以提取Row
,然后将单个字段值作为Row
的属性。所以,在这种情况下,它将是:
db(db.items.id==int(row)).select(db.items.imageName)[0].imageName
或:
db(db.items.id==int(row)).select(db.items.imageName).first().imageName
rows.first()
优于rows[0]
的优势在于前者在没有行的情况下返回None
,而后者将生成异常(这在上面没有帮助case,因为如果没有行,后续尝试访问.imageName
属性会引发异常。
注意,即使select只返回一个包含单个字段的行,您仍然必须如上所述显式提取行和字段值。