我在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
的单独文件中声明了所有授权模型。我也遵循了上述问题的所有迹象,但仍然有问题。
有人找到了解决方案吗?
答案 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本身不会这样做。所以这不是声明性语法的问题。很抱歉给您带来不便。