首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行table.field.max()时出现Web2py错误"pydal.objects.Expression object“

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

Stack Overflow用户
提问于 2020-03-27 20:30:38
回答 1查看 58关注 0票数 0

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

插件工作正常。max()行给出一个错误: 0x0000024D079AF748处的pydal.objects.Expression对象

我做错了什么?

模型:

代码语言:javascript
复制
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)')

控制器:

代码语言:javascript
复制
def test():
    id = db.CardMasters.insert(Name='please work')
    maxName = db.CardMasters.Name.max()
    maxid = db.CardMasters.id.max()

    return locals()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-28 08:11:00

你不会得到一个错误。相反,您将返回两个PyDAL Expression对象( DAL Field对象的.max()方法返回一个Expression对象)。如果您随后尝试在视图中包含这些对象,它们将被转换为字符串,并且当您将任意Python对象转换为字符串时,您将获得该对象的默认字符串表示,如<pydal.objects.Expression object at 0x0000024D079AF748>

大概您要做的是查询数据库以找到最大名称(按字母顺序排列的最后一个名称)和最大id。要获得这些值,可以执行以下操作:

代码语言:javascript
复制
    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])

在视图中,您可以执行以下操作:

代码语言:javascript
复制
{{=maxName}}
{{=maxid}}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60886061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档