身份图和工作单元模式是sqlalchemy比django.db更具吸引力的部分原因。但是,我不确定身份映射如何工作,或者当应用程序配置为wsgi并且直接通过api调用而不是共享服务访问orm时它是否有效。我想,apache会为每个请求创建一个带有自己的python实例的新线程。因此,每个实例都有自己的sqlalchemy类实例,并且无法使用标识映射。这是对的吗?
答案 0 :(得分:5)
我认为你误解了身份地图模式。
来自:http://martinfowler.com/eaaCatalog/identityMap.html
身份地图记录所有内容 从中读取的对象 单个业务中的数据库 事务。
记录保存在单一商业交易的身份图中。这意味着无论您的Web服务器如何配置,您可能不会将它们保留的时间超过请求(或将它们存储在会话中)。
通常情况下,您不会有很多用户参与单一业务转换。无论如何,您可能不希望您的用户共享对象,因为他们最终可能会做出相互矛盾的事情。
答案 1 :(得分:0)
所以这一切都取决于你如何设置sqlalchemy连接。通常你要做的是管理每个wsgi请求以拥有它自己的threadlocal会话。本次会议将了解其中的所有内容,添加/更改的项目/等。但是,每个线程都不知道其他线程。通过这种方式,模型和映射的加载/预配置在启动时共享,但每个请求可以独立于其他请求运行。