Как разбить models.py на разные файлы для разных моделей в Pyramid?

Я новичок в пирамиде и стараюсь внести некоторые изменения в свой проект. Я пытаюсь разделить мои модели / классы на отдельные файлы, а не на один файл models.py. Для этого я удалил old models.py и создал папку с файлом __init__.py вместе с одним файлом для каждого класса. В __init__.py я импортировал класс, используя from .Foo import Foo .

Это заставляет представления работать правильно, и они могут инициализировать объект.

Но запуск сценария initializedb не создает новые таблицы, как это было, когда у меня были все модели в одном файле models.py. Он не создает соответствующие таблицы, а непосредственно пытается вставить в них.

Может ли кто-нибудь дать мне пример структуры проекта пирамиды, в которой есть модели в разных файлах?

  • Итерация через словарь Python с помощью клавиш в отсортированном порядке
  • Как присоединиться к двум генераторам в Python?
  • Поиск полного пути в трассировке Python
  • Как совместить скобки / скобки в pyparsing
  • Python Leave Loop Early
  • Довольно печатать 2D-список Python
  • Сброс объекта генератора в Python
  • Как полиморфизм работает в Python?
  • 2 Solutions collect form web for “Как разбить models.py на разные файлы для разных моделей в Pyramid?”

     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 

    Однажды у меня была такая же проблема.

    Решение для разделенных файлов модели: вы должны инициализировать все базовые классы (родительские) из ваших файлов отдельно:

     #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) 
    Python - лучший язык программирования в мире.