Kar*_*ran 11 python model-view-controller pyramid
我是金字塔的新手,一直在努力对我的项目进行一些改动.我试图将我的模型/类拆分为单个文件而不是单个models.py文件.为了做到这一点,我删除了旧的models.py并创建了一个带__init__.py文件的模型文件夹以及每个类的一个文件.在__init__.py我使用导入类from .Foo import Foo.
这使视图正常工作,并且可以初始化对象.
但是,运行initializedb脚本不会像我在单个models.py中拥有所有模型时那样创建新表.它不会创建相关表,而是直接尝试插入它们.
谁能给我一个金字塔项目结构的例子,它有不同文件中的模型?
Mic*_*kel 23
myapp
__init__.py
scripts
__init__.py
initialize_db.py
models
__init__.py
meta.py
foo.py
moo.py
Run Code Online (Sandbox Code Playgroud)
现在meta.py可以包含共享Base以及DBSession:
Base = declarative_base()
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension))
Run Code Online (Sandbox Code Playgroud)
每个foo.py并moo.py可以导入从他们共同的基础meta.py.
from .meta import Base
class Foo(Base):
pass
Run Code Online (Sandbox Code Playgroud)
要确保从models子包中拾取所有表,并且为了方便起见,您可以将它们导入models/__init__.py:
from .meta import DBSession
from .foo import Foo
from .moo import Moo
Run Code Online (Sandbox Code Playgroud)
如果不执行此类操作,则不会将不同的表附加到其中Base,因此在create_all调用时不会创建.
initialize_db然后,您的脚本可以通过创建所有表
from myapp.models.meta import Base
Base.metadata.create_all(bind=engine)
Run Code Online (Sandbox Code Playgroud)
您的视图可以导入模型以获利:
from myapp.models import DBSession
from myapp.models import Foo
Run Code Online (Sandbox Code Playgroud)