sqlalchemy使用过程中的问题

sqlalchemy使用过程中的问题

  1. 使用in_关键字的时候,如果后面有跟update和delete,需要增加参数来执行。因为该orm需要评估你这个语句的风险以及后续的返回
1
2
db.session.query(HostList).filter(HostList.ip.in_(deal_hosts_list)).\
update({HostList.used_status: 0}, synchronize_session='fetch')

synchronize_session的参数说明

  • False

    1. 不同步 session,如果被删除的 objects 已经在 session 中存在,在 session commit 或者 expire_all 之前,这些被删除的对象都存在 session 中。

    2. 不同步可能会导致获取被删除 objects 时出错。

  • fetch

    1. 删除之前从 db 中匹配被删除的对象并保存在 session 中,然后再从 session 中删除,这样做是为了让 session 的对象管理 identity_map 得知被删除的对象究竟是哪些以便更新引用关系。
  • evaluate

    1. 默认值。根据当前的 query criteria 扫描 session 中的 objects,如果不能正确执行则抛出错误,这句话也可以理解为,如果 session 中原本就没有这些被删除的 objects,扫描当然不会发生匹配,相当于匹配未正确执行。
    2. 注意这里报错只会在特定 query criteria 时报错,比如 in 操作