Ich füge diese anwser hinzu, da es eine Mischung aus @mekarpeles und @ hd1 ist. Ich meine ich nicht die sqlalchemy Hierarchie von Objekten geändert haben, nur zum Delegieren von einem einfachen JSONEncoder:
# given that you have
Base = declarative_base()
class SqlAlchemyModelEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, Base):
result = OrderedDict()
for key in obj.__mapper__.c.keys():
result[key] = getattr(obj, key)
return result
return json.JSONEncoder.default(self, obj)
Wenn Ihre Modelle nicht serialisierbar Klassen verwenden (Datumzeit zum Beispiel) Sie sie dem Encoder hinzufügen:
if isinstance(obj, datetime):
return obj.isoformat()
Und dann benutze ich es mit einem jinja2 Kontextfilter:
@contextfilter
def tojson(ctx, model, *elements, **kw):
return json.dumps(model, cls=SqlAlchemyModelEncoder)
umm, [ 'json'] (http: // docs. python.org/2/library/json.html)? –
ja, aber sqlalchemy Ergebnis kann nicht von json codiert :( – Nolik
Sie können Snippet aus meiner Antwort http://stackoverflow.com/questions/7102754/jsonify-a-sqlalchemy-result-set-in-flask/14322313 verwenden # 14322313 – n0nSmoker