SQLAlchemy对接MariaDB无法获取全量行,调用query.all报属性错误
错误原因
- 原生SQLAlchemy中
session.query是可调用方法,你需要先将待查询的模型类作为参数传入query(),才能链式调用all()方法获取全量数据,你的写法直接调用query.all()把query当成了属性对象,才会触发属性不存在报错 - 你之前尝试的
Employee.query.all()是Flask-SQLAlchemy扩展提供的语法糖,纯原生SQLAlchemy环境下模型类默认没有绑定query属性,所以也会触发属性报错 - 额外注意:你当前初始化的
EmployeeSchema默认是单对象序列化模式,查询全量返回的是实例列表,直接序列化会导致输出不符合预期
解决步骤
1. 修正查询语法
将路由中错误的查询行替换为以下代码:
all_employee = session.query(Employee).all()
2. 修正序列化逻辑
两种方案二选一即可:
- 调整Schema初始化参数:把
employee_schema = EmployeeSchema()修改为employee_schema = EmployeeSchema(many=True) - 调用dump时指定多对象参数:把
result = employee_schema.dump(all_employee)修改为result = employee_schema.dump(all_employee, many=True)
修正后的完整路由代码参考
@app.route('/', methods=['GET']) def get_employee(): all_employee = session.query(Employee).all() app.logger.info(f"employees is {str(all_employee)}") result = employee_schema.dump(all_employee, many=True) return jsonify(result)
内容的提问来源于stack exchange,提问作者Texia Plazaola
相关产品推荐
相关产品推荐

