ColanderAlchemy+Pyramid 的自动 setup_schema 放在哪里

Where to put automatic setup_schema for ColanderAlchemy+Pyramid

文档说把它放在某个地方:

from sqlalchemy import event
from colanderalchemy import setup_schema
event.listen(mapper, 'mapper_configured', setup_schema)

这应该放在金字塔的什么地方?我应该使用 Pyramid 事件而不是 SQLAlchemy 的事件吗?

当我尝试将它放在 models.py 文件的顶部时,它抱怨 mapper 不存在;我还应该使用它吗?

您需要使用 SQLAlchemy events,因为它们会告诉您 SQLAlchemy 内部发生了什么(它们与金字塔事件完全无关)。

ColanderAlchemy 的文档令人困惑;他们对 mapper 的要求是您的模型 class(它 不是 映射器)。

因此在你的模型中你应该做这样的事情:

class MyModelClass(Base):
    ...

event.listen(
    MyModelClass,
    "mapper_configured",
    setup_schema)

测试套件显示它是这样工作的:

from sqlalchemy import event
from colanderalchemy import setup_schema
from sqlalchemy.orm import mapper

event.listen(mapper, 'mapper_configured', setup_schema)

请告诉我这是否为您解决了问题,我可以相应地更新文档。