sqlalchemy使用过程中的问题
- 使用
in_
关键字的时候,如果后面有跟update和delete,需要增加参数来执行。因为该orm需要评估你这个语句的风险以及后续的返回
1 | db.session.query(HostList).filter(HostList.ip.in_(deal_hosts_list)).\ |
synchronize_session的参数说明
False
不同步 session,如果被删除的 objects 已经在 session 中存在,在 session commit 或者 expire_all 之前,这些被删除的对象都存在 session 中。
不同步可能会导致获取被删除 objects 时出错。
fetch
- 删除之前从 db 中匹配被删除的对象并保存在 session 中,然后再从 session 中删除,这样做是为了让 session 的对象管理 identity_map 得知被删除的对象究竟是哪些以便更新引用关系。
evaluate
- 默认值。根据当前的 query criteria 扫描 session 中的 objects,如果不能正确执行则抛出错误,这句话也可以理解为,如果 session 中原本就没有这些被删除的 objects,扫描当然不会发生匹配,相当于匹配未正确执行。
- 注意这里报错只会在特定 query criteria 时报错,比如 in 操作