执行 table.field.max() 时出现 Web2py 错误 "pydal.objects.Expression object"

Web2py error "pydal.objects.Expression object" when doing table.field.max()

我相信我遵循这里的代码:http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer?search=insert#sum-avg-min-max-and-len

插入工作正常。 max() 行给出错误:pydal.objects.Expression object at 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()

您没有收到错误。相反,您要返回两个 PyDAL Expression 对象(DAL Field 对象的 .max() 方法 returns 和 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}}