在SqlAlchemy ORM中的下一个查询上刷新了多少未决操作?

时间:2019-04-15 19:09:26

标签: sqlalchemy

我正在学习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吗?

此外,延迟这样的冲洗的基本原理是什么?为什么不总是立即冲洗所有东西?

1 个答案:

答案 0 :(得分:1)

想象一下您梦worst以求的数据库。意大利面条代码向左和向右触发,由谁知道。可能有一个业务规则,每个苹果要缴纳2个橙子的税。因此,为了保持秩序,SQLAlchemy必须在进行每个查询之前清除所有更改,除非您告知它不需要这样做。

关于延迟刷新,它可以允许例如将对同一表的多次写入批处理为单个多值INSERT语句,这意味着到数据库的往返次数更少。