将sqlalchemy查询结果转换为dicts列表

sal*_*mey 7 python sqlalchemy

我想将我的查询结果转换为这样的dicts列表:

result_dict = [{'category': 'failure', 'week': '1209', 'stat': 'tdc_ok', 'severityDue': '2_critic'}, {'category': 'failure', 'week': '1210', 'stat': 'tdc_nok', 'severityDue': '2_critic'}]
Run Code Online (Sandbox Code Playgroud)

但相反,我把它作为一个字典,因此重复键:

result_dict = {'category': 'failure', 'week': '1209', 'stat': 'tdc_ok', 'severityDue': '2_critic', 'category': 'failure', 'week': '1210', 'stat': 'tdc_nok', 'severityDue': '2_critic'}
Run Code Online (Sandbox Code Playgroud)

我通过这样做得到这个结果:

for u in my_query.all():
     result_dict = u.__dict__
Run Code Online (Sandbox Code Playgroud)

如何将sqlAlchemy查询结果转换为dicts列表(每行都是dict)?

请帮忙

twi*_*wil 11

尝试

result_dict = [u.__dict__ for u in my_query.all()]
Run Code Online (Sandbox Code Playgroud)

除了 result_dict之前的for循环类型?这种行为很奇怪.


Abh*_*raj 9

现在可以了

result_dict = [u._asdict() for u in my_query.all()]
Run Code Online (Sandbox Code Playgroud)

原因是 u 实际上不是一个元组,而是一个 KeyedTuple。

该线程的正确答案也会有所帮助


Ben*_*Man 5

没有.all()

你可以试试:

result_dict = [u.__dict__ for u in my_query.fetchall()]
Run Code Online (Sandbox Code Playgroud)

  • 这取决于您是否使用 ORM(OP 未指定)。`.all()` 是 ORM 查询的 `fetchall()` 代理。 (4认同)