Как преобразовать результат запроса sqlalchemy automap в json? - PullRequest
0 голосов
/ 30 октября 2019

У меня уже есть база данных с таблицами, которые представляют модель 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

Я хочу создать json из моего автоматического запроса sqlalchemy. Что мне делать?

1 Ответ

1 голос
/ 30 октября 2019

Вы могли бы потенциально сделать что-то вроде:

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)

Но, как и предполагалось, лучше использовать pandas dataframe to_json.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...