ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

python-flask中的Jsonify flask-sqlalchemy多对一关系

2019-10-29 05:56:28  阅读:258  来源: 互联网

标签:flask-restful flask flask-sqlalchemy json python


我正在尝试使用flask-restful使rest api成为我正在使用flask-sqlalchemy作为ORM的地方.这是我的模型类.

class Post(db.Model):
__tablename__ = 'post'
postid = db.Column(db.Integer,primary_key=True)
post = db.Column(db.String(64))
userid = db.Column(db.Integer,db.ForeignKey('user.userid'))

#serialize property used for serializing this class to JSON
@property
def serialize(self):
    return {
        'postid': self.postid,
        'post': self.post,
        'author':self.author
    }

class User(db.Model):
userid = db.Column(db.Integer,primary_key=True)
username = db.Column(db.String(30))
email = db.Column(db.String(20))
posts = db.relationship('Post',backref="author",lazy='dynamic')

#serialize property used for serializing this class to JSON
@property
def serialize(self):
    return {
        'username': self.username,
        'email': self.email
    }

然后填充数据库.现在我正在尝试从中制作json

class PostList(Resource):
    def get(self):
        posts = DL_models.Post.query.all()
        posts = [post.serialize for post in posts]
        return { 'posts': posts }

api.add_resource(PostList, '/twitter/api/v1.0/posts', endpoint = 'posts')

当我将Post中的序列化方法更改为

@property
def serialize(self):
    return {
        'postid': self.postid,
        'post': self.post,
        'author':self.postid
    }

这将返回预期的json输出,但是当我更改为’author’:self.author时,出现错误

TypeError: <app.DL_models.User object at 0x7f263f3adc10> is not JSON serializable

我知道我也必须对那些嵌套对象调用序列化,但是我不知道该怎么做.

或者,请分享您的经验以在sqlalchemy中编码关系.

解决方法:

由于您已经在使用Flask-Restful,您是否考虑过使用其内置的data marshaling solution

但是,对于封送复杂的数据结构,我发现Marshmallow的任务性能要好上千倍,甚至可以简化嵌套序列化程序在其他程序中的工作.还有一个Flask扩展,用于检查端点和输出URL.

标签:flask-restful,flask,flask-sqlalchemy,json,python
来源: https://codeday.me/bug/20191029/1957952.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有