Python 无法将元数据绑定到金字塔应用程序中SQLAlchemy的引擎

Python 无法将元数据绑定到金字塔应用程序中SQLAlchemy的引擎,python,sqlalchemy,pyramid,Python,Sqlalchemy,Pyramid,有人能给我解释一下为什么这不起作用吗: 我的init.py文件: from pyramid.config import Configurator from pyramid_jinja2 import renderer_factory from sqlalchemy import engine_from_config from .models import (DBSession, Base, ) def main(global_

有人能给我解释一下为什么这不起作用吗:

我的init.py文件:

from pyramid.config import Configurator
from pyramid_jinja2 import renderer_factory
from sqlalchemy import engine_from_config

from .models import (DBSession, 
                Base,
                )

def main(global_config, **settings):
    engine = engine_from_config(settings, 'sqlalchemy.')
    DBSession.configure(bind = engine)
    Base.metadata.bind = engine

    config = Configurator(settings = settings)
    config.include('pyramid_jinja2')

    #The views/routes are added here
    config.add_static_view('static', 'static')
    config.add_static_view('scripts', 'scripts')

    config.add_route("my_route", '/')
    config.add_route("sign_in", "/sign_in")
    config.add_route("sign_up", "/sign_up")
    config.add_route("main_page", "/{username}")
    config.scan()

    return config.make_wsgi_app()
My models.py文件:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy.schema import Table
from sqlalchemy import create_engine
from sqlalchemy.orm import (scoped_session, sessionmaker, synonym, relation, backref)
from sqlalchemy.ext.declarative import declarative_base, DeferredReflection
from zope.sqlalchemy import ZopeTransactionExtension


DBSession = scoped_session(sessionmaker(extension = ZopeTransactionExtension()))
Base = declarative_base(cls=DeferredReflection)


#Define your models here
class User(Base):
    __table__ = Table('users', Base.metadata, autoload = True)
我完全按照Pyramid教程(即在init.py中使用Base.metadata.bind=engine)中的规定进行了操作,但仍然出现以下错误:


“sqlalchemy.exc.UnboundExecutionError:没有引擎绑定到此表的元数据。请将引擎通过autoload_与='someengine'传递到表中,或通过MetaData将元数据与引擎关联。绑定='someengine'”

在绑定引擎之前,不能使用
自动加载。SQLA试图在模块初始化时反映
users
表,即使元数据尚未关联任何引擎

我对此的“修复”有两个方面——一个定制的表格工厂:

def AutoloadedTable(*args, **kwargs):
    rv = Table(*args, **kwargs)
    rv.deferred_autoloading = True
    return rv
这只是填充
deferred_autoloading
属性,并在创建引擎后添加以下代码段

from sqlalchemy.engine import reflection

inspector = reflection.Inspector.from_engine(engine)
for i in list(metadata.tables.values()):
    if getattr(i, 'deferred_autoloading', False):
        inspector.reflecttable(i, None)

我已按照以下说明解决了此问题:

及加入


Base.prepare(engine)到我在init.py file

中的主函数,你知道我能做些什么来解决这个问题吗?