为什么查询 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 True
或 False
取决于使用该用户名的用户是否已经存在。
方法如下:
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()
。
我正在创建一个连接到本地托管的 MySQL 数据库的 Flask 应用程序(使用 SQL-Alchemy ORM)。当用户创建帐户时,我有一个方法 is_taken
和 returns True
或 False
取决于使用该用户名的用户是否已经存在。
方法如下:
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()
。