使用repoze.what与pylons中的声明性语法

时间:2011-06-18 16:23:58

标签: python sqlalchemy pylons

我在Pylons写一个应用程序,我想添加一个授权方案。我选择了repoze.what。我按照Pylons食谱中的教程进行了操作:

http://wiki.pylonshq.com/display/pylonscookbook/Authorization+with+repoze.what

问题在于lib/auth.py我需要包含用户,组和权限的模型。在模型中使用声明性基础,当我想部署时,它会给我一个错误:

sqlalchemy.exc.UnboundExecutionError: No engine is bound to this Table's MetaData.
Pass an engine to the Table via autoload_with=<someengine>, or associate the MetaData
with an engine via metadata.bind=<someengine>

我在这里发现了类似的问题:

SQLAlchemy declarative syntax with autoload (reflection) in Pylons

我在__init__.py的单独文件中声明了所有授权模型。我也遵循了上述问题的所有迹象,但仍然有问题。 有人找到了解决方案吗?

2 个答案:

答案 0 :(得分:0)

在模型__init__.py中,您需要将引擎绑定到会话。

def init_model(engine):
    """Call me before using any of the tables or classes in the model"""
    ## Reflected tables must be defined and mapped here
    #global reflected_table
    #reflected_table = sa.Table("Reflected", meta.metadata, autoload=True,
    #                           autoload_with=engine)
    #orm.mapper(Reflected, reflected_table)

    session = orm.sessionmaker(bind=engine, autoflush=True, autocommit=False)
    meta.metadata.bind = engine
    meta.engine = engine
    meta.Session = orm.scoped_session(session)

资源: http://docs.pylonsproject.org/projects/pylons_framework/dev/advanced_models.html

答案 1 :(得分:0)

我想我找到了解决方案。我只是在包含授权模型的模块中创建一个引擎,然后将其绑定到元数据。我不知道为什么init_model本身不会这样做。所以这不是声明性语法的问题。很抱歉给您带来不便。