I am working on a simple CRUD application and I can't return an array of objects in Flask.
My db Model is like this:
class QrRecord(db.Model):
id = db.Column(db.String(256), primary_key=True)
name = db.Column(db.String(128), nullable=False)
date = db.Column(db.Date, nullable=False)
qrType = db.Column(db.String(128), nullable=False)
count = db.Column(db.Integer, nullable=False)
def toJson(self):
return jsonify(
{
"id": self.id,
"name": self.name,
"date": self.date,
"qrType": self.qrType,
"count": self.count
}
)
And I am trying to return it like so:
@app.route("/qr", methods=["GET"])
def qr_get():
tasks: list = QrRecord.query.order_by(QrRecord.date).all()
return jsonify(tasks)
The error I get is:
<title>TypeError: Object of type type is not JSON serializable
// Werkzeug Debugger</title>
When I am returning one single object as return return tasks[0].toJson()
, it works just fine. The same when I would return an array of anything else, just like return jsonify([1, 2, 3])
.
Would anybody know how to return the array of QrRecords? I feel like I have tried every solution already.
This answer has already been more or less answered to here: How to serialize SqlAlchemy result to JSON?
Using @dataclass
together with statically typed params helped:
@dataclass
class QrRecord(db.Model):
id: str = db.Column(db.String(256), primary_key=True)
name: str = db.Column(db.String(128), nullable=False)
date: datetime = db.Column(db.Date, nullable=False)
qrType: str = db.Column(db.String(128), nullable=False)
count: int = db.Column(db.Integer, nullable=False)
@app.route("/qr", methods=["GET"])
def qr_get():
tasks: list = QrRecord.query.order_by(QrRecord.date).all()
return jsonify(tasks)