即时与loadonfirstaccess可用性

2024-06-17 08:37:36 发布

您现在位置:Python中文网/ 问答频道 /正文


Tags: python
2条回答

立即:SQLAlchemy从数据库中为插入的每个会话对象获取一个主键,并将其分配给会话对象。会话对象立即需要主键,因为在提交事务快照之前,该对象进入持久状态,并被添加到标识映射集合中,标识映射集合对其主键进行了键控。[The SQLAlchemy Session - In Depth]

首次访问时加载:与对象关联的数据库生成的默认值可能永远不会在其会话中使用。为了节约资源,这些都是lazy loaded所需要的。你知道吗

SQLAlchemy对支持它的DBs使用INSERT .. RETURNING来获取主键,或者对不支持它的DBs使用像^{}这样的特殊函数

对于默认值,它尝试使用RETURNING,但如果不支持,则必须使用另一个SELECT。你知道吗

此外,在特定情况下(例如,当INSERT语句被批处理时,请参见this mailing list post),可能无法使用RETURNING(甚至在支持的DBs上)。你知道吗

最后,SQLAlchemy只在默认情况下获取INSERT之后的主键。因此,只有主键“立即”可用,而未配置的默认列是“首次访问时加载”。如果需要它来获取生成的值,请指定^{}。(在DB不支持RETURNING并且您为列指定了FetchedValue的情况下,我不确定它是否仍然使用立即数SELECT获取值,或者只是返回到“首次访问时加载”。)

相关问题 更多 >