I am trying to get list of all objects from database, for which I am using following logic to get all results within Employees model page:
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()))}
for end point logic, I am using following logic:
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()
Upon hitting on end point, I am not getting a list, but a single response of null values, like this:
{
"data": {
"employee_id": 0,
"employee_name": null,
"gender": null,
"birth_date": null,
"hire_date": null,
"created_at": null,
"last_updated_at": null
}
}
What possibly can be a problem?
Ok, after a while, I saw that I have to change my marshal_with
fields
, so I made some changes as per that..
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
})
}
and It worked accordingly.