python - Flask 更新查询

标签 python sqlalchemy

在我的 Flask Web 应用程序中,我有一个登录系统。当用户登录时,在我的数据库表中,我想更新用户上次登录的日期时间。 我正在使用这段代码:

 @app.route('/login', methods=['POST'])
 def do_admin_login():
     POST_CODICE_FISCALE = str(request.form['codice_fiscale'])
     POST_PASSWORD = str(request.form['password'])
     pwd_enc=base64.b64encode(POST_PASSWORD)

     Session = sessionmaker(bind=engine)
     s = Session()
     query = s.query(User).filter(User.codice_fiscale.in_([POST_CODICE_FISCALE]), User.password.in_([pwd_enc]))
     result = query.first()
     if result:
        session['logged_in'] = True
        query = s.query(User).filter(User.codice_fiscale.in_([POST_CODICE_FISCALE]).update(User.data_ora_ultimo_accesso=datetime.now()))  
        query.first()
        db.session.commit()
    else:
        flash('wrong password!')
    return home()

但我收到错误:

 query = s.query(User).filter(User.codice_fiscale.in_([POST_CODICE_FISCALE]).update(User.
 data_ora_ultimo_accesso=datetime.now())) 
 SyntaxError: keyword can't be an expression

哪里出了问题? 谢谢。

最佳答案

正如错误所述,函数调用参数列表中的关键字不能是表达式,例如 User.data_ora_ultimo_accesso,而是 identifier 。相反,你应该通过 Query.update()列、表达式对的字典:

    query = s.query(User).\
        filter(User.codice_fiscale.in_([POST_CODICE_FISCALE]).\
        update({ User.data_ora_ultimo_accesso: datetime.now() },
               synchronize_session=False))

请注意,由于您立即提交,因此无需同步 session ,因为所有状态无论如何都会过期。

您还可以进行一些更改来提高代码的可读性。例如代替

filter(User.codice_fiscale.in_([POST_CODICE_FISCALE]),
       User.password.in_([pwd_enc]))

只是

filter(User.codice_fiscale == POST_CODICE_FISCALE,
       User.password == pwd_enc)

与仅测试相等性相比,检查 1 项列表是否包含某些内容没有意义。

最后,您创建一个新的 Session 类及其实例 s,但您提交了一个不同的 session :db.session,您可能应该一直使用它。这意味着您的更新将不会发生,因为该 session 的事务并未实际提交。

关于python - Flask 更新查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44308889/

相关文章:

python - 属性错误 : 'InstrumentedList' object has no attribute

python - 使用 SQLALchemy 将关系插入到连接 3 个具有多对多关系的表的表中 - python

python - 从特定目录中选择文件

python - 不理解 for 循环中的 if/else 行为

python - 如何计算 Pandas 数据帧列中的 float 或整数数?

python - 使用 sqlalchemy 的 row_to_json 语法

python - 使用 SQLAlchemy 的声明性语法时访问表实例的最佳方式

python - 请求包含查询字符串的当前路由?

python - 用装饰器覆盖 Django View

python - sqlalchemy 中是否有一种解决方法可以在没有任何主键的情况下从数据库加载表?