代码之家  ›  专栏  ›  技术社区  ›  Jaigus

为什么我的查询对象没有被执行,而仍然是一个查询对象?

  •  0
  • Jaigus  · 技术社区  · 8 年前

    我正在使用金字塔和sqlalchemy为一些简单的论坛创建api。我有一个视图,当用户向下滚动到页面末尾时,我想简单地以json形式向客户端返回一些帖子。由于某种原因,查询甚至没有运行,我返回的是查询对象而不是rowproxy对象。这只是一个测试查询,顺便说一句,我只是从数据库中得到了几次,并试图以json格式发送它们。

    @view_config(route_name='get-posts', renderer='json')
    def get-posts(request)
        q = session.query(Topic).filter(Topic.name =='gaming')\
        .order_by(desc(Topic.topic_date)).limit(10)
        results = [dict(zip(row.keys()) for row in q)]
        return {'posts' : results} 
    

    当运行时,我得到“AttributeError:‘Topic’对象没有attribtue键”,在检查q的类型时,我发现它的类型是:sqlalchemy.orm.query.query

    有人知道为什么查询没有运行吗?我有一个非api视图函数,我实际上在做同样的事情,并返回结果(一个行代理作为字典的内容,它工作。。。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Yacine Filali    8 年前

    这是设计的。查询中存在导致执行基础查询的方法。all()、one()、first()等。

    如果您需要查询对象作为列表,请对其调用all():

    @view_config(route_name='get-posts', renderer='json')
    def get-posts(request)
        q = session.query(Topic).filter(Topic.name =='gaming')\
        .order_by(desc(Topic.topic_date)).limit(10)
        return {'posts' : q.all()} 
    

    查询对象的引用: http://docs.sqlalchemy.org/en/latest/orm/query.html#the-query-object