我正在制作一个Web应用程序,用于搜索包含我观看的电影,节目,书籍,游戏等的个人SQLite数据库。我正在通过制作一个搜索函数来测试它。我想将三个查询组合成一组结果,然后在我的Jinja模板上迭代这些结果以显示它们。搜索查询是用flask/sqlalchemy完成的,如下所示:
if(request.method=="POST" and len(request.form["searchBar"]) > 0):
searchVal = request.form["searchBar"]
startSearch = "%{}"
genSearch = "%{}%"
query1 = Media.query.filter_by(title=searchVal)
query2 = Media.query.filter(Media.title.like(startSearch.format(searchVal)))
query3 = Media.query.filter(Media.title.like(genSearch.format(searchVal)))
searchQuery = query1.union(query2, query3).all()
session["results"] = searchQuery
return redirect(url_for("results"))
预期的行为是它重定向到“results”,它使用session["results"]
将数据传递到我的jinja模板。然而,在它到达results函数之前,无论出于什么原因,我的POST请求得到了500响应。当我运行它时,控制台中有很多输出,但重复出现的消息似乎是TypeError: Object of type Media is not JSON serializable
为什么会发生这种情况?我想当我执行.all()
时,它会给我一个可以迭代的列表。在任何情况下,我首先在哪里尝试使其JSON可序列化?
谢谢你的帮助
编辑:这里是媒体类的定义
class Media(db.Model):
mediaid = db.Column(db.Integer, primary_key=True)
title = db.Column(db.Text)
year = db.Column(db.Integer)
status = db.Column(db.Text)
mediatype = db.Column(db.Text)
seriesid = db.Column(db.Integer, db.ForeignKey('series.seriesid'))
externalinfo = db.Column(db.Text)
extranotes = db.Column(db.Text)
1条答案
按热度按时间g6ll5ycj1#
默认情况下,Flask将会话存储在客户端Web浏览器的cookie中
这对于简单的任务很好
但是,当您需要序列化稍微复杂的东西(如日期或小数)时,它就不能很好地工作了。
我建议安装和使用Flask-Session,以便使用服务器端会话,它可以更好地处理序列化的事情:
pip install flask-session
在www.example.com中app.py:
那应该能用