python - Flask SQLAlchemy 获取所有 json

标签 python sql json flask sqlalchemy

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

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 检索用户时,该方法非常有效,但不适用于所有用户的列表。

最佳答案

flask.jsonify不使用生成器。尝试传递一个列表,例如:

代码:

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

关于python - Flask SQLAlchemy 获取所有 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48491178/

相关文章:

python - Matplotlib 图例垂直旋转

C#。检查 SQL 数据适配器的特定值

mysql - 如何在参数化查询中转义单引号

sql - 使用 pgadmin3 的 Postgresql 导入转储

javascript - 如何访问 JSON 中的数组并在 Jade 中迭代

jquery - Lastfm json 响应 'undefined'

json - 将Elastic输出摄取到Elastic中

python - 访问文本区域 Spotfire 中的计算值

python - TensorBoard 训练图的步骤比验证图少。为什么?

python - 获取公共(public) Google 文档文件的下载链接