将数据库查询中的字典/命名元组存储在Flask的会话对象中会引发“ TypeError:无法腌制sqlite3.Row对象”

flask一起进行我的第一个婴儿项目。这是一个游戏,我的目标是将用户当前的“实时游戏”和“团队”(组)存储在session-dict中,因此我不必在每次调用路由时都运行数据库查询(我可以不会想到以其他方式优雅地“集中”存储和传递这些数据)。

因此,我在第13和14行的代码“ new_game”(附加)中进行了此操作。get_db()函数(在此处找到:https://flask.palletsprojects.com/en/1.1.x/patterns/sqlite3/)返回一个namedtuple-还附加了它的实现。 / p>

这些行导致我的调试器转储“ TypeError:无法腌制sqlite3.Row对象”。现在,我怀疑问题可能在于命名元组为类型,并用dict()封装了get_db(),但这并没有改变。 在我看来,这是对有经验的人来说非常常见的解决方案,因此非常感谢...因此对此的任何帮助/提示/背景将不胜感激! ☺️

@app.route("/new_game",methods=["GET","POST"])
@login_required
def new_game():
  # get group_name from form & initiating user's turn
  if request.method == "POST":
    group_name = request.form.get("group")
    row = query_db("SELECT * FROM groups WHERE group_name=? AND user_id=?",[group_name,session["user_id"]],one=True)

    # new DB entry for new game
    get_db().execute("INSERT INTO games (active,turn,group_name) VALUES (:active,:turn,:group_name)",{"active":1,"turn":row["turn"],"group_name":row["group_name"]})
    get_db().commit()
    #store user's live game and group in session
    session["game"] = query_db("SELECT * FROM games INNER JOIN groups ON groups.group_name=games.group_name INNER JOIN users ON users.user_id=groups.user_id WHERE users.user_id=? AND games.active=?",[session["user_id"],1],one=True)
    session["gamegroup"] = query_db("SELECT * FROM groups INNER JOIN games ON games.group_name=groups.group_name INNER JOIN users ON groups.user_id=users.user_id WHERE groups.user_id=? AND games.active=?",one=True)
    return render_template("live_game.html",turn=row["turn"],round=1,isturn=True,group_name=group_name)
  else:
    return redirect("/new_game")
###########################################

def get_db():
  db=getattr(g,'_database',None)
  if db is None:
    db = g._database = sqlite3.connect("ce.db")
    db.row_factory = sqlite3.Row
  return db

def query_db(query,args=(),one=False):
    cur = get_db().execute(query,args)
    rv = cur.fetchall()
    cur.close()
    return (rv[0] if rv else None) if one else rv
hellionhe 回答:将数据库查询中的字典/命名元组存储在Flask的会话对象中会引发“ TypeError:无法腌制sqlite3.Row对象”

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3144513.html

大家都在问