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)
请告诉我这是否为您解决了问题,我可以相应地更新文档。
文档说把它放在某个地方:
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)
请告诉我这是否为您解决了问题,我可以相应地更新文档。