我正在学习SQLAlchemy ORM,我认为我对基本知识有所了解。我想知道的一件事是:进行隐含数据库写操作的更改(例如session.add(my_object)
)时,该更改在会话中被视为待处理且未写入直到下一个查询之前。
我想知道的是,所有这样的写操作是否总是在下一个查询之前写成总是,还是下一个查询必须以某种方式与待处理写相关?例如,如果我发出命令session.add(my_object)
,然后我的下一个命令是session.query(ClassOfMyObject).filter(...some condition which would match my_object).all()
,则我知道在执行后面的查询之前,肯定会先刷新第一个写入。但是如果对象完全不相关怎么办? session.add(apple)
和session.query(Orange).filter(...)
中的苹果和橘子之间甚至没有外键?在我们查询apple
之前,还会写Orange
吗?
此外,延迟这样的冲洗的基本原理是什么?为什么不总是立即冲洗所有东西?
答案 0 :(得分:1)
想象一下您梦worst以求的数据库。意大利面条代码向左和向右触发,由谁知道。可能有一个业务规则,每个苹果要缴纳2个橙子的税。因此,为了保持秩序,SQLAlchemy必须在进行每个查询之前清除所有更改,除非您告知它不需要这样做。
关于延迟刷新,它可以允许例如将对同一表的多次写入批处理为单个多值INSERT语句,这意味着到数据库的往返次数更少。