как обрабатывать изменения модели в пирамиде - PullRequest
8 голосов
/ 31 марта 2011

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

Я относительно новичок в веб-фреймворках Python. Мой опыт работы с PHP, и совсем недавно я закончил проект с использованием Symfony 1.4, где я обычно мог просто сделать symfony doctrine:build --all --and-load, и это заняло бы перестройку классов модели, воссоздание базы данных и загрузку данных, среди прочего.

В настоящее время я просто удаляю базу данных, воссоздаю ее и обрабатываю приложение с помощью paster, который позаботится о воссоздании таблиц и тому подобного.

Это, наверное, нубский вопрос, но вы идете.

Ответы [ 2 ]

4 голосов
/ 31 марта 2011

Я сейчас использую sql alchemy migrate, и это довольно просто.

вот учебник: http://spyced.blogspot.com/2008/07/sqlalchemy-migrate-for-dummies.html

и PDF с дополнительной информацией и учебниками: http://www.google.com/url?sa=t&source=web&cd=5&sqi=2&ved=0CC4QFjAE&url=http%3A%2F%2Fsqlalchemy-migrate.googlecode.com%2Ffiles%2Fsqlalchemy-migrate-0.5.1.3-docs.pdf&rct=j&q=sqlalchemy%20migrate&ei=QgCUTYGGEcPPiALH65SdCQ&usg=AFQjCNHG-1IdCiIPSslwK_hTMiCzrYVvoA&sig2=b_5-I3D-nebSVR_7FccRvQ&cad=rja

его легко установить, вносить изменения (обновления до более ранних версий) в базу данных с помощью выраженного sqlalchemy способа.

2 голосов
/ 31 марта 2011

Хорошо, неважно.Я изменил свой initialize_sql так:

def initialize_sql(engine):
    DBSession.configure(bind=engine)
    Base.metadata.bind = engine
    Base.metadata.drop_all(engine) #added this
    Base.metadata.create_all(engine)
    try:
        populate()
    except IntegrityError:
        pass

К счастью, это удаляет только таблицы, а не всю базу данных, поэтому он работает быстро.

...