Ошибка web2py «объект pydal.objects.Expression» при выполнении table.field.max () - PullRequest
0 голосов
/ 27 марта 2020

Полагаю, я следую приведенному здесь коду: http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer?search=insert#sum -avg-min-max-and-len

Вставка работает нормально. Строки max () выдают ошибку: объект pydal.objects.Expression по адресу 0x0000024D079AF748

Что я делаю не так?

Модель:

db = DAL('sqlite://storage.sqlite')

db.define_table(
    'CardMasters',
    Field('Name'),
    Field('Categories'),
    Field('Description'),
    singular="Card Master", plural="Card Masters",
    format = '%(Name)s (%(Description)s)')

Контроллер:

def test():
    id = db.CardMasters.insert(Name='please work')
    maxName = db.CardMasters.Name.max()
    maxid = db.CardMasters.id.max()

    return locals()

1 Ответ

0 голосов
/ 28 марта 2020

Вы не получаете сообщение об ошибке. Скорее вы возвращаете два объекта PyDAL Expression (метод .max() объекта DAL Field возвращает объект Expression). Если вы затем попытаетесь включить эти объекты в ваше представление, они будут преобразованы в строки, а когда вы преобразуете произвольный объект Python в строку, вы получите строковое представление объекта по умолчанию, например <pydal.objects.Expression object at 0x0000024D079AF748>.

Предположительно, вы намеревались запросить базу данных, чтобы найти максимальное имя (которое будет последним в алфавитном порядке) и максимальное id. Чтобы получить эти значения, вы можете сделать что-то вроде этого:

    maxName = db.CardMasters.Name.max()
    maxid = db.CardMasters.id.max()
    row = db(db.CardMasters).select(maxName, maxid).first()
    return dict(id=id, maxName=row[maxName], maxid=row[maxid])

В представлении вы можете сделать:

{{=maxName}}
{{=maxid}}
...