2024-09-27 17:41:36 发布
网友
立即:SQLAlchemy从数据库中为插入的每个会话对象获取一个主键,并将其分配给会话对象。会话对象立即需要主键,因为在提交事务快照之前,该对象进入持久状态,并被添加到标识映射集合中,标识映射集合对其主键进行了键控。[The SQLAlchemy Session - In Depth]
首次访问时加载:与对象关联的数据库生成的默认值可能永远不会在其会话中使用。为了节约资源,这些都是lazy loaded所需要的。你知道吗
SQLAlchemy对支持它的DBs使用INSERT .. RETURNING来获取主键,或者对不支持它的DBs使用像^{}这样的特殊函数
INSERT .. RETURNING
对于默认值,它尝试使用RETURNING,但如果不支持,则必须使用另一个SELECT。你知道吗
RETURNING
SELECT
此外,在特定情况下(例如,当INSERT语句被批处理时,请参见this mailing list post),可能无法使用RETURNING(甚至在支持的DBs上)。你知道吗
INSERT
最后,SQLAlchemy只在默认情况下获取INSERT之后的主键。因此,只有主键“立即”可用,而未配置的默认列是“首次访问时加载”。如果需要它来获取生成的值,请指定^{}。(在DB不支持RETURNING并且您为列指定了FetchedValue的情况下,我不确定它是否仍然使用立即数SELECT获取值,或者只是返回到“首次访问时加载”。)
FetchedValue
立即:SQLAlchemy从数据库中为插入的每个会话对象获取一个主键,并将其分配给会话对象。会话对象立即需要主键,因为在提交事务快照之前,该对象进入持久状态,并被添加到标识映射集合中,标识映射集合对其主键进行了键控。[The SQLAlchemy Session - In Depth]
首次访问时加载:与对象关联的数据库生成的默认值可能永远不会在其会话中使用。为了节约资源,这些都是lazy loaded所需要的。你知道吗
SQLAlchemy对支持它的DBs使用} 这样的特殊函数
INSERT .. RETURNING
来获取主键,或者对不支持它的DBs使用像^{对于默认值,它尝试使用
RETURNING
,但如果不支持,则必须使用另一个SELECT
。你知道吗此外,在特定情况下(例如,当
INSERT
语句被批处理时,请参见this mailing list post),可能无法使用RETURNING
(甚至在支持的DBs上)。你知道吗最后,SQLAlchemy只在默认情况下获取} 。(在DB不支持
INSERT
之后的主键。因此,只有主键“立即”可用,而未配置的默认列是“首次访问时加载”。如果需要它来获取生成的值,请指定^{RETURNING
并且您为列指定了FetchedValue
的情况下,我不确定它是否仍然使用立即数SELECT
获取值,或者只是返回到“首次访问时加载”。)相关问题 更多 >
编程相关推荐