【问题标题】:Return a list from Python Flask Get endpoint [duplicate]从Python Flask Get端点返回列表[重复]
【发布时间】:2020-06-04 04:05:11
【问题描述】:

我的 python 版本是 2.7,Flask 版本是 0.10。 下面是我的脚本:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask import request, jsonify
from flask import Response
import json
from pprint import pprint

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://postgres:postgres@localhost/postgres'
app.debug = True
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)

    def __init__(self, username, email):
        self.username = username
        self.email = email

    def __repr__(self):
        return '<User %r' % self.username

 @app.route('/users', methods=['GET'])
 def get_users():
    myUsers = User.query.all()
    pprint(myUsers)
    return jsonify({'users': myUsers})

@app.route('/post_user', methods=['POST'])
def post_user():
    data = request.get_json()
    user = User(data['username'], data['email'])
    db.session.add(user)
    db.session.commit()
    return jsonify(**data)

if __name__ == '__main__':
    app.run()

后调用工作正常,我可以看到数据库中的数据。但是当我尝试获取用户时,出现以下错误:

'TypeError: &lt;User u'John' is not JSON serializable // Werkzeug Debugger'. 

“打印”的输出如下:

[<User u'John', <User u'Jane']

它不会打印列表中的整个对象,即 id、用户名和电子邮件。我不确定这里有什么问题。我已经阅读了许多关于使用 Flask 恢复列表的 stackoverflow 帖子,但没有任何效果。另外,我需要使用的版本很旧,所以这也是一个限制。

【问题讨论】:

    标签: python postgresql flask sqlalchemy


    【解决方案1】:

    我预计问题出在您的 __repr__ 函数中,它返回字符串 '&lt;User %r' % self.username 并且不返回整个对象数据。

    我可以建议您在 User 类中使用这样的序列化函数:

        @property
        def serialize(self):
            return {
                'id': self.id,
                'username': self.username
                'email': self.email
            }
    

    然后您将能够使用以下命令返回 JSON 输出:

    users = session.query(User).all()
    return jsonify(users=[i.serialize for i in users])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 2019-06-01
      • 2015-09-21
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多