Python 名称错误:名称';基数';没有定义

Python 名称错误:名称';基数';没有定义,python,sqlite,python-2.7,sqlalchemy,Python,Sqlite,Python 2.7,Sqlalchemy,下面是包含所有表映射器类的文件 // import statements Class MyBase(AbstractBase, Base): session = None def __init__(self): global Session self.session = Session() // init statements Class Table1(MyBase): // fields engine = create

下面是包含所有表映射器类的文件

// import statements
Class MyBase(AbstractBase, Base):
    session = None
    def __init__(self):
        global Session
        self.session = Session()
        // init statements

Class Table1(MyBase):
    // fields

engine = create_engine("...")

Session = session_maker(engine)

Base = declarative_base()

Base.meta.create_all()
  • 我得到
    name错误:没有定义名称“Base”,因为我的类在
    Base
    初始化之前扩展了它

  • 如果我将引擎创建、会话创建和基础创建移到定义类之上,我可以让它工作。但是
    Base.meta.create_all()
    应该出现在类声明下面。如果我将
    Base.meta.create_all()
    放在类上方,则不会创建任何表

  • 我不想使用
    main()
    ,因为我基本上要将此文件导入其他文件中

  • 因此,我希望在类定义之后保留所有语句(engine、session、base和create_all())

    编辑:


    我将engine、Session、Base移动到Base.py&导入它以在Tables.py中定义表在test.py中导入了这两个选项。test.py将调用create_tables(),它在base.py中定义为静态方法。

    您不能这样做。如果没有
    Base
    类,则无法创建模型。如果您想分隔行,请将这些行移动到单独的模块并导入该单独的模块,但从根本上说,您无法按要求执行操作。是否有任何方法可以像此类
    MyBase(AbstractBase,globals.Base)
    ?没有,因为您尚未定义
    Base
    。因此,我可以移动引擎,会话等,除了Base.meta.create_all()到另一个模块?是。我将
    Base.meta.create_all()
    移动到一个实用函数;我并不总是想执行这一行。