5

身份映射和工作单元模式是 sqlalchemy 比 django.db 更具吸引力的部分原因。但是,我不确定身份映射如何工作,或者当应用程序配置为 wsgi 并且通过 api 调用而不是共享服务直接访问 orm 时它是否工作。我想apache会为每个请求创建一个带有自己的python实例的新线程。因此,每个实例都有自己的 sqlalchemy 类实例,并且无法使用身份映射。它是否正确?

4

2 回答 2

7

我认为您误解了身份映射模式。

来自:http ://martinfowler.com/eaaCatalog/identityMap.html

身份映射记录了在单个业务事务中从数据库中读取的所有对象。

单个业务交易的记录保存在身份映射中。这意味着无论您的 Web 服务器是如何配置的,您可能不会将它们保留超过请求的时间(或将它们存储在会话中)。

通常,您不会有很多用户参与单个业务交易。无论如何,您可能不希望您的用户共享对象,因为他们最终可能会做一些自相矛盾的事情。

于 2011-05-03T12:57:56.567 回答
0

所以这一切都取决于你如何设置你的 sqlalchemy 连接。通常你所做的是管理每个 wsgi 请求以拥有它自己的线程本地会话。本次会议将了解它的所有情况,添加/更改/等项目。但是,每个线程都不知道其他线程。通过这种方式,模型和映射的加载/预配置在启动期间共享,但是每个请求都可以独立于其他请求运行。

于 2011-05-03T12:42:08.330 回答