Python Sql Alchemy - 如何从数据库查询中对类对象结果进行json化

oll*_*leh 6 python sqlalchemy flask eve

基本上,我只想json编码我的SQL查询的结果.

x = db.session.query(User).filter_by(username = request.form['username'], password = request.form['password']).first()
  print vars(x)
return jsonify(x)

raise TypeError(repr(o) + " is not JSON serializable")

TypeError: < User WashingtonGeorge> is not JSON serializable
Run Code Online (Sandbox Code Playgroud)

这是打印变量的结果(x)

{'_updated': None, 'username': u'WashingtonGeorge', 'password': u'Washington', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x7fd12a50c8d0>, 'firstname': u'George', 'lastname': u'Washington', '_created': None, 'fullname': u'George Washington', '_id': 1, 'email': u'WashingtonGeorge@yahoo.com'}
Run Code Online (Sandbox Code Playgroud)

Nim*_*ush 5

你可以使用marshallow.这是一个例子.定义a serializer.py并将其放在main.py文件旁边,并且:

serializer.py

from marshmallow import Serializer

###### USER SERIALIZER #####
class UserSerializer(Serializer):
    class Meta:
        # Fields to expose
        fields = ('username')
        # you can add any other member of class user in fields

#Return the user data in json format
def get_user_serialized(user):
    return UserSerializer(user).data
Run Code Online (Sandbox Code Playgroud)

在你的 main.py

from .serializers import get_user_serialized
...
...
...

x = db.session.query(User).filter_by(username = request.form['username'], password = request.form['password']).first()

serialized = [get_user_serialized(item) for item in x]
res = jsonify(res=serialized)
return res
Run Code Online (Sandbox Code Playgroud)

  • 这是与棉花糖1.0最新的要点:https://gist.github.com/sloria/aecc540db3a95fbbee2f (4认同)

小智 1

通过 JSON 序列化,您可以做到这一点。

看这个: http: //prschmid.blogspot.com/2012/12/json-serializing-sqlalchemy-objects.html

它对我有用