我是新来的金字塔和一直在努力做一些改变我的项目。 我想我的模型/类分成单独的文件,而不是一个单一的models.py文件。 为了做到这一点我已删除了旧models.py并创建了一个模型文件夹__init__.py
一个文件为每个类沿文件。 在__init__.py
我用导入的类from .Foo import Foo
。
这使得视图正确工作,他们可以初始化的对象。
但在运行initializedb脚本,因为它没有当我在一个models.py所有型号不创建新表。 它不会创建相关的表,但直接试图以它们插入。
谁能给我这有不同的文件模型金字塔项目结构的例子吗?
myapp
__init__.py
scripts
__init__.py
initialize_db.py
models
__init__.py
meta.py
foo.py
moo.py
现在meta.py
可以包含共享Base
以及所述DBSession
:
Base = declarative_base()
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension))
每个foo.py
和moo.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
我有同样的问题一次。
对于splited模型文件求解:你必须单独初始化从文件中的所有基地(父)类:
#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)
文章来源: How do I split models.py into different files for different models in Pyramid?