Невозможно преобразовать все элементы в объекте SQLAlchemy в значение ключа в словаре - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь преобразовать каждую строку в объекте результатов SQLAlchemy в словарь, где заголовок каждого столбца является ключом.Однако не все столбцы в моем запросе возвращаются в словарь.Ни один из столбцов таблицы «Проект» не виден.

Требуется ли в цикле my дополнительный шаг для распаковки этих столбцов и их значений?

projects_for_template = (
      db.session.query(Project, func.count(Entry.id).label('entry_count'))
      .join(Entry, Project.name == Entry.project)
      .group_by(Project)
)

projects_for_template_list = []

for row in projects_for_template.all():
        row_dict = row._asdict()
        projects_for_template_list.append(row_dict)

print (projects_for_template_list)

[{'entry_count': 45L, 'Project': <Project 1>}, {'entry_count': 3L, 'Project': <Project 2>}, {'entry_count': 62L, 'Project': <Project 3>}]

Я бы ожидал увидеть что-то подобное ...

[{'entry_count': 45L, 'project_id': 123, 'client_name': XYZcorp, 'analyst_name': Bob}, {'entry_count': 3L, 'project_id': 456, 'client_name': Acme_Inc, 'analyst_name': Jane}, {'entry_count': 62L, 'project_id': 789, 'client_name': Innotek, 'analyst_name': Michael}]

1 Ответ

0 голосов
/ 01 февраля 2019

Поскольку вы запрашиваете весь объект Project, а не отдельные поля Project

projects_for_template = (
      db.session.query(Project.id,Project.client_name,func.count(Entry.id).label('entry_count'))
      .join(Entry, Project.name == Entry.project)
      .group_by(Project.id,Project.client_name) # add all the fields here
)

ИЛИ

Вы также можете перебирать набор результатов и преобразовывать проектобъект для получения значений ключа с внесением изменений в sql

...