2014-01-28 4 views
0

Когда я есть последующий запрос:web2py дб запрос выберите показ имя поля

str(db(db.items.id==int(row)).select(db.items.imageName)) + "\n" 

Выход включает имя поля:

items.imageName 
homegear\homegear.jpg 

Как я удалить его, так что имя поля не будет включая и только выбранное имя.

я пытался ссылаться на него как список [1] ​​дает мне об отсутствии ошибок диапазона и [0] я в конечном итоге с:

<Row {'imageName': 'homegear\\homegear.jpg'}> 

выше не список, какой объект является то, что и как могу ли я на это ссылаться?

Спасибо!

Джон

ответ

5

db(db.items.id==int(row)).select(db.items.imageName) возвращает Rows объект и метод его __str__ преобразует его в выходной CSV, который является то, что вы видите.

объект Rows объект содержит объекты , а объект содержит значения полей. Чтобы получить доступ к отдельному значению поля, вы должны сначала проиндексировать объект Rows, чтобы извлечь , а затем получить значение отдельного поля в качестве атрибута . Таким образом, в данном случае, это было бы:

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 в случае нет никаких строк, в то время как последний будет генерировать исключение (это не помогает в вышеупомянутом случае, поскольку последующая попытка получить доступ к атрибуту .imageName приведет к возникновению исключения в любом случае, если не было строк).

Обратите внимание, что даже если выбор возвращает только одну строку с одним полем, вам все равно придется явно извлекать строку и значение поля, как указано выше.

Смежные вопросы