为什么查询 MySQL 数据库的 "user is taken" 方法会传递不可变字典?

Why would a "user is taken" method that queries a MySQL database pass an immutable dict?

我正在创建一个连接到本地托管的 MySQL 数据库的 Flask 应用程序(使用 SQL-Alchemy ORM)。当用户创建帐户时,我有一个方法 is_taken 和 returns TrueFalse 取决于使用该用户名的用户是否已经存在。

方法如下:

def is_taken(username):
    q = session.query(User).filter(User.username == username).first()
    return not (q is None)

虽然不是经常发生,但每天至少出现一次以下错误:

StatementError: (sqlalchemy.exc.InvalidRequestError) Can't reconnect until invalid transaction is rolled back [SQL: u'SELECT users.uid AS users_uid, users.username AS users_username, users.fullname AS users_fullname, users.password AS users_password, users.score AS users_score, users.totalattempted AS users_totalattempted, users.totalcorrect AS users_totalcorrect, users.settings AS users_settings \nFROM users \nWHERE users.username = %s \n LIMIT %s'] [parameters: [immutabledict({})]]

错误具体触发于:

q = session.query(User).filter(User.username == username).first()

非常感谢您的帮助!

您在执行此查询之前进行了无效交易。首先,我建议您找到导致此问题的先前查询的问题。为了解决这个问题,您在 运行 查询之前执行 session.rollback()