我该怎么分开模型.py在金字塔中不同模型的不同文件中?

2024-10-02 04:25:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我是金字塔新手,一直在努力对我的项目进行一些改变。我正在尝试将我的模型/类拆分为单个文件,而不是单个文件模型.py文件。为了这样做,我不得不把旧的移走模型.py并为每个类创建了一个带有__init__.py文件的models文件夹。在__init__.py中,我使用from .Foo import Foo导入了该类。在

这样可以使视图正常工作,并且可以初始化对象。在

但是运行initializedb脚本并不像在一个单独的模型中创建所有模型时那样创建新表模型.py. 它不创建相关表,而是直接尝试在其中插入。在

有谁能给我一个金字塔项目结构的例子,在不同的文件中有模型?在


Tags: 文件项目对象frompy模型import脚本
2条回答
myapp
    __init__.py
    scripts
        __init__.py
        initialize_db.py
    models
        __init__.py
        meta.py
        foo.py
        moo.py

现在,meta.py可以包含一个共享的Base,以及DBSession

^{pr2}$

每个foo.py和{}都可以从meta.py导入它们的共享基。在

from .meta import Base

class Foo(Base):
    pass

为了确保从models子包中提取所有表,并且为了方便起见,可以将它们导入models/__init__.py

from .meta import DBSession
from .foo import Foo
from .moo import Moo

如果不这样做,不同的表将不会附加到Base,因此在调用create_all时也不会创建这些表。在

然后,initialize_db脚本可以通过

from myapp.models.meta import Base
Base.metadata.create_all(bind=engine)

您的观点可以导入模型以获取利润:

from myapp.models import DBSession
from myapp.models import Foo

我曾经有过同样的问题。在

拆分模型文件的解决方法:必须分别从文件初始化所有基(父)类:

#initializedb.py
...
from project.models.Foo import Base as FooBase
from project.models.Moo import Base as MooBase
...

def main(argv=sys.argv):
    ...
    FooBase.metadata.create_all(engine)
    MooBase.metadata.create_all(engine)

相关问题 更多 >

    热门问题