2011-07-22 17 views
6

Zmodyfikowałem samouczek w SqlAlchemy-Migrate tutorial na deklaratywną składnię dla mojego projektu Pylons Pyramid. Mogę pomyślnie uaktualnić i obniżyć wersję, ale obawiam się, że poniżej znajduje się Base.metadata.drop_all (migrate_engine). Oto mój plik migracji:SqlAlchemy Migrate Declarative

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? 

[edytuj] Moje pytanie było jak indywidualnie tworzyć tabele. Nie wiedziałem, że to jest moje pytanie, dopóki nie zadam wystarczająco złego pytania, aby uzyskać prawidłowe pytanie.

Odpowiedz

6

Prawidłowe rozwiązanie na uaktualnienie jest dostać się do stołu i tworzą go indywidualnie, jak takie:

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) 

, a dla obniżenia:

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