Jak przekonwertować wynik obiektu SQLAlchemy orm do formatu JSON?Konwersja SqlAlchemy wynik orm do dyktowania
Obecnie używam odbicie sqlalchemy do odzwierciedlenia tabel z DB. Zastanów się, czy mam tabelę użytkownika i tabelę adresów. Zastanawiam się nad DB. Jednostka użytkownika ma relację jeden do jednego z encją adresu. Poniżej znajduje się kod odzwierciedlający tabelę z bazy danych i wykorzystujący klasę mapper do odwzorowania relacji.
from sqlalchemy import Table
from sqlalchemy.orm import mapper, relationship
user_reflection = Table('user', metadata, autoload=True, autoload_with=engine)
class User(object):
def __init__(self, id, name, dob):
self.id = id
self.name = name
self.dob = dob
address_reflection = Table('address', metadata, autoload=True, autoload_with=engine)
mapper(User,
user_reflection,
properties={
'address': relationship(SourceAddress, uselist=False)
}
)
Teraz kiedy kwerendy obiektu przy sqlalchemy orm
user = session.query(User).first()
user_dict = object_to_dict(user)
Teraz, gdy chcę, aby przekształcić obiekt użytkownika do dict użyć poniższego sposobu
def object_to_dict(obj):
columns = [column.key for column in class_mapper(obj.__class__).columns]
get_key_value = lambda c: (c, getattr(obj, c).isoformat()) if isinstance(getattr(obj, c), datetime) else (c, getattr(obj, c))
return dict(map(get_key_value, columns))
jednak metody object_to_dict działają poprawnie i zwracają prawidłowy obiekt dic, jeśli zwrócono obiekt użytkownika, który nie ma relacji z inną tabelą. Jeśli obiekt użytkownika ma relację, metoda object_to_dict nie powoduje automatycznego rozwinięcia obiektu relacji i przekonwertowania go na dict.
Czy ktoś mógłby zasugerować mi, w jaki sposób mógłbym automatycznie określić, czy zwracany obiekt użytkownika ma relację i rozwinąć obiekt relacji do dyktatury, czy ma taki i tak dalej dla dowolnej liczby obiektów podrzędnych.
istnieje bug na ten kod, należy dodaj "name" na back_relationships, a nie "relation.backref" (poprawiłem Twój post, wystarczy zatwierdzić). – iuridiniz
Jak uniknąć niepotrzebnych kolumn? –