为什么我的查询对象没有被执行,并且仍然是查询对象?

时间:2016-11-15 20:17:23

标签: python sqlalchemy pyramid

我正在使用金字塔和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} 

当这个运行时,我会得到"属性错误:'主题' object没有attribtue键",在检查q的类型时,我发现它的类型为:sqlalchemy.orm.query.Query

有谁知道为什么查询没有运行?我有一个非api视图函数,其中我做了几乎相同的事情,并返回结果(行代理作为字典的内容,它的工作原理......

1 个答案:

答案 0 :(得分:2)

这是设计的。查询上有一些方法会导致执行底层查询。 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