【问题标题】:Flask SQL Alchemy GET all json烧瓶 SQLAlchemy 获取所有 json
【发布时间】:2018-07-07 13:16:56
【问题描述】:

我正在尝试从我的数据库中检索和序列化用户,但我无法一次获取多个用户。这是我的序列化方法:

def serialize(self):
    return {
        'first_name': self.first_name,
        'last_name': self.last_name,
        'email': self.email
    }

以及我获得所有用户的途径:

@app.route('/users', methods=['GET'])
def get_users():
    users = Users.query.all()
    return jsonify(Users.serialize(user) for user in users)

当我通过 id 检索用户时,该方法非常有效,但不适用于所有用户的列表。

【问题讨论】:

    标签: python sql json flask sqlalchemy


    【解决方案1】:

    flask.jsonify 不接受generators。尝试传递list,而不是像:

    代码:

    return jsonify([Users.serialize(user) for user in users])
    

    测试代码:

    from flask import json as flask_json
    
    # dumps is what jsonify calls
    print(flask_json.dumps(list(range(9))))
    print(flask_json.dumps([i for i in range(9)]))
    print(flask_json.dumps(i for i in range(9)))
    

    测试结果:

    [0, 1, 2, 3, 4, 5, 6, 7, 8]
    [0, 1, 2, 3, 4, 5, 6, 7, 8]
    
    Traceback (most recent call last):
      File "C:\Program Files\JetBrains\PyCharm 2017.2.3\helpers\pydev\pydevd.py", line 1599, in <module>
        globals = debugger.run(setup['file'], None, None, is_module)
      File "C:\Program Files\JetBrains\PyCharm 2017.2.3\helpers\pydev\pydevd.py", line 1026, in run
        pydev_imports.execfile(file, globals, locals)  # execute the script
      File "C:\Program Files\JetBrains\PyCharm 2017.2.3\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
        exec(compile(contents+"\n", file, 'exec'), glob, loc)
      File "C:/Users/stephen/Documents/src/testcode/test.py", line 22, in <module>
        print(flask_json.dumps(i for i in range(9)))
      File "C:\Users\stephen\AppData\Local\Programs\Python\Python36\lib\site-packages\flask\json.py", line 123, in dumps
        rv = _json.dumps(obj, **kwargs)
      File "C:\Users\stephen\AppData\Local\Programs\Python\Python36\lib\json\__init__.py", line 238, in dumps
        **kw).encode(obj)
      File "C:\Users\stephen\AppData\Local\Programs\Python\Python36\lib\json\encoder.py", line 199, in encode
        chunks = self.iterencode(o, _one_shot=True)
      File "C:\Users\stephen\AppData\Local\Programs\Python\Python36\lib\json\encoder.py", line 257, in iterencode
        return _iterencode(o, 0)
      File "C:\Users\stephen\AppData\Local\Programs\Python\Python36\lib\site-packages\flask\json.py", line 80, in default
        return _json.JSONEncoder.default(self, o)
      File "C:\Users\stephen\AppData\Local\Programs\Python\Python36\lib\json\encoder.py", line 180, in default
        o.__class__.__name__)
    TypeError: Object of type 'generator' is not JSON serializable
    

    【讨论】:

      猜你喜欢
      • 2017-04-16
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-20
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多