2016-11-15 8 views
0

Я создаю api для простого форума с использованием пирамиды и sqlalchemy. У меня есть представление, в котором я хочу просто вернуть некоторые сообщения в json-форме клиенту, когда пользователь прокручивается до конца страницы. По какой-то причине запрос даже не запускается, и мне возвращают объект запроса, а не объект rowproxy. Это всего лишь тестовый запрос btw, я просто получаю несколько раз из db и пытаюсь отправить их в 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: объект„на тему“не имеет attribtue ключи», и после проверки типа ц, я обнаружил, что это типа: sqlalchemy.orm.query.Query

Кто-нибудь знает, почему запрос не выполняется? У меня есть функция просмотра не api, где я делаю практически одно и то же, и возвращаю результат (прокси-сервер строки в виде содержимого словаря, и он работает ...

+0

[dict (zip (row.keys()) для строки в q)] вернет список длины 1, где единственным элементом является словарь. Вы хотите это? –

+0

Это всегда будет объект запроса. Это просто, что итерация по запросу дает свои результаты. – kindall

+0

@JeffMandell Да, я пытаюсь получить версию словаря запроса, чтобы я мог вернуть его в json – Jaigus

ответ

2

Это по дизайну. запрос, который вызывает выполнение основного запроса все(), один(), первый() и т.д.

Если вам нужен объект запроса в виде списка, вызовите все() на нем:.

@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