SqlAlchemy Migrate Декларативный - PullRequest
6 голосов
/ 22 июля 2011

Я изменил учебник по SqlAlchemy-Migrate учебник для декларативного синтаксиса для моего проекта Pylons Pyramid. Я могу успешно обновить и понизить версию, но меня беспокоит команда Base.metadata.drop_all (migrate_engine) ниже. Вот мой файл миграции:

from sqlalchemy import Column
from sqlalchemy.types import Integer, String, DateTime
from sqlalchemy.sql import func
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import scoped_session, sessionmaker

from zope.sqlalchemy import ZopeTransactionExtension

DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    email = Column(String(75), unique=True)
    fullname = Column(String(60))          
    password = Column(String(51))          
    last_login = Column(DateTime)          
    date_joined = Column(DateTime, default=func.now())

def upgrade(migrate_engine):
    # Upgrade operations go here. Don't create your own engine; bind migrate_engine
    # to your metadata
    Base.metadata.bind = migrate_engine
    Base.metadata.create_all(migrate_engine) # IS THIS DANGEROUS?

def downgrade(migrate_engine):
    # Operations to reverse the above upgrade go here.
    Base.metadata.bind = migrate_engine
    Base.metadata.drop_all(migrate_engine) # IS THIS DANGEROUS?

[править] У меня был вопрос, как индивидуально создавать таблицы. Я не знал, что это был мой вопрос, пока не задал неправильный вопрос, чтобы получить правильный вопрос.

1 Ответ

7 голосов
/ 22 июля 2011

Правильным решением при обновлении является получение таблицы и ее создание по отдельности, например:

def upgrade(migrate_engine):
    # Upgrade operations go here. Don't create your own engine; bind migrate_engine
    # to your metadata
    User.__table__.create(migrate_engine)

и для понижения:

def downgrade(migrate_engine):
    # Operations to reverse the above upgrade go here.
    User.__table__.drop(migrate_engine)
...