我正在尝试从数据库中检索和序列化用户,但我无法一次获取多个用户。这是我的序列化方法:
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/