【问题标题】:sqlalchemy identity map questionsqlalchemy 身份映射问题
【发布时间】:2011-05-03 12:35:00
【问题描述】:

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

【问题讨论】:

    标签: python sqlalchemy identity-map


    【解决方案1】:

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

    发件人:http://martinfowler.com/eaaCatalog/identityMap.html

    身份映射记录所有 已从 单一业务中的数据库 交易。

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

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

    【讨论】:

    • 啊,谢谢。我认为这是单笔交易。你是马丁福勒还是巧合地叫马丁?
    • 不,我不是马丁·福勒。这只是一个巧合。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      • 2011-04-18
      • 2021-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多