【问题标题】:How to convert sqlalchemy automap query result to json?如何将 sqlalchemy 自动映射查询结果转换为 json?
【发布时间】:2020-02-25 20:32:56
【问题描述】:

我已经有代表 json-reply 模型的表的数据库

我正在使用 Base = automap_base() 来创建这样的类

import simplejson as json
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import Session
from sqlalchemy import create_engine
from sqlalchemy.orm.attributes import QueryableAttribute


Base = automap_base()

# engine, suppose it has two tables 'user' and 'address' set up
engine = create_engine("mysql+pymysql://test:test@localhost/test")

# reflect the tables
Base.prepare(engine, reflect=True)

session = Session(engine)
Person = Base.classes.person

persons = session.query(Person).all()
for person in persons:
    print (person.name)

s = json.dumps([dict(r) for r in persons.values()])

我有这个错误:

Traceback (most recent call last):
  File "c:/Users/rusagm/pythonProjects/sqlalchemytest/send.py", line 24, in <module>
    s = json.dumps([dict(r) for r in persons])
  File "c:/Users/rusagm/pythonProjects/sqlalchemytest/send.py", line 24, in <listcomp>
    s = json.dumps([dict(r) for r in persons])
TypeError: 'person' object is not iterable

我想从我的 sqlalchemy 自动映射查询创建 json。我该怎么办?

【问题讨论】:

  • 将查询响应加载到 pandas 数据帧中,然后使用 df.to_json 保存到 json。

标签: python json sqlalchemy


【解决方案1】:

您可能会执行以下操作:

import json
from bson import json_util
json.dumps([{i:v for i, v in r.__dict__.items() if i in r.__table__.columns.keys()} for r in persons], default=json_util.default)

但正如建议的那样,熊猫数据框 to_json 会更好。

【讨论】:

  • 如何使用 Pandas 数据框做到这一点?由于延迟加载,我收到错误。我找不到绕过它的方法。
  • 我建议你发布一个关于你的特殊情况的问题。
猜你喜欢
  • 2016-03-27
  • 2022-01-09
  • 2012-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-23
  • 1970-01-01
相关资源
最近更新 更多