我正在尝试从数据库中获取所有对象的列表,为此我使用以下逻辑来获取员工模型页面中的所有结果:
class Employees(db.Model):
___tablename___ = "employees"
emp_no = db.Column(db.Integer, primary_key=True)
birth_date = db.Column(db.Date)
first_name = db.Column(db.String())
last_name = db.Column(db.String())
gender = db.Column(db.Enum(GenderChoices, values_callable=lambda x: [str(member.value)
for member in GenderChoices]))
hire_date = db.Column(db.DateTime)
created_at = db.Column(db.DateTime, default=datetime.datetime.utcnow)
last_updated_at = db.Column(db.DateTime, default=datetime.datetime.utcnow)
def return_all(cls):
def to_json(x):
return {
'employee_id': x.emp_no,
'employee_name': x.first_name + " " + x.last_name,
'gender': x.gender,
'birth_date': x.birth_date,
'hire_date': x.hire_date,
'created_at': x.created_at.strftime("%Y-%m-%d %H:%M:%S"),
'last_updated_at': x.last_updated_at.strftime("%Y-%m-%d %H:%M:%S")
}
return {'Employees': list(map(lambda x: to_json(x), Employees.query.all()))}
对于端点逻辑,我使用以下逻辑:
GET_EMPLOYEE = {
'data': fields.Nested({
'employee_id': fields.Integer,
'employee_name': fields.String,
'gender': fields.String,
'birth_date': fields.String,
'hire_date': fields.String,
'created_at': fields.Raw,
'last_updated_at': fields.Raw
})
}
class GetAllEmployees(Resource):
@marshal_with(GET_EMPLOYEE)
def get(self):
return Employees.return_all()
到达终点后,我没有得到列表,而是得到空值的单个响应,如下所示:
{
"data": {
"employee_id": 0,
"employee_name": null,
"gender": null,
"birth_date": null,
"hire_date": null,
"created_at": null,
"last_updated_at": null
}
}
可能出现什么问题?
好吧,过了一会儿,我发现我必须改变我的
marshal_with
fields
,所以我做了一些改变..
GET_ALL_EMPLOYEE = {
'Employees': fields.Nested({
'employee_id': fields.Integer,
'employee_name': fields.String,
'gender': fields.String,
'birth_date': fields.String,
'hire_date': fields.String,
'created_at': fields.Raw,
'last_updated_at': fields.Raw
})
}
并且它相应地起作用了。