SQLAlchemy конвертирует результат запроса SELECT в список dicts

Когда я использовал session.query, мне удалось преобразовать результат в список dicts:

my_query = session.query(table1,table2).filter(all_filters) result_dict = [u.__dict__ for u in my_query.all()] 

Но теперь, когда мне нужно работать с операцией SELECT() , как я могу преобразовать результаты в dict, который выглядит так, для каждого результата строки:

[{'Row1column1Name' : 'Row1olumn1Value', 'Row1column2Name' :'Row1Column2Value'},{'Row2column1Name' : 'Row2olumn1Value', 'Row2column2Name' : 'Row2Column2Value'},etc....] .

Это мой код SELECT ():

 select = select([table1,table2]).where(all_filters) res = conn.execute(select) row = res.fetchone() #I have to use fetchone() because the query returns lots of rows resultset=[] while row is not None: row = res.fetchone() resultset.append(row) print resultset 

Результат:

 [('value1', 'value2', 'value3', 'value4'),(.....),etc for each row] 

Я новичок в Python, любая помощь будет оценена.

3 Solutions collect form web for “SQLAlchemy конвертирует результат запроса SELECT в список dicts”

Кажется, это объект RowProxy. Пытаться:

 row = dict(zip(row.keys(), row)) 

Вы можете вывести каждую строку из выбранного результата в виде либо dict, либо кортежа. То, что вы видели, – это поведение по умолчанию, которое должно представлять каждую строку как кортеж. Чтобы привести тип к типу, измените свой код следующим образом:

 select = select([table1, table2]).where(all_filters) res = conn.execute(select) resultset = [] for row in res: resultset.append(dict(row)) print resultset 

Это работает хорошо, если вам нужно обрабатывать результат по одной строке за раз.

Если вы с удовольствием поместите все строки в список за один раз, понимание списка немного опрятно:

 select = select([table1, table2]).where(all_filters) res = conn.execute(select) resultset = [dict(row) for row in res] print resultset 

Для первого запроса лучше использовать этот подход для sqlalchemy KeyedTuple:

 # Convert an instance of `sqlalchemy.util._collections.KeyedTuple` # to a dictionary my_query = session.query(table1,table2).filter(all_filters) result_dict = map(lambda q: q._asdict(), my_query) 

ИЛИ

 result_dict = map(lambda obj: dict(zip(obj.keys(), obj)), my_query) 

Для ResultProxy, как упоминалось ранее:

 result_dict = dict(zip(row.keys(), row)) 
  • Как сопоставить один класс с несколькими таблицами с SQLAlchemy?
  • Получение SQLAlchemy для выпуска CREATE SCHEMA на create_all
  • Триггер в sqlachemy
  • Является ли запрос SQLAlchemy уязвимым для инъекционных атак?
  • Как вернуть количество связанных объектов в запросе sqlalchemy
  • jsonify набор результатов SQLAlchemy в Flask
  • Каковы преимущества использования Elixir
  • sqlalchemy flask: AttributeError: объект «Session» не имеет атрибута «_model_changes» на session.commit ()
  • Python - лучший язык программирования в мире.