2011-07-22 15 views
6

He modificado el tutorial en SqlAlchemy-Migrate tutorial en sintaxis declarativa para mi proyecto Pylons Pyramid. Puedo actualizar y degradar con éxito, pero me preocupa el comando Base.metadata.drop_all (migrate_engine) a continuación. Aquí está mi archivo de migración: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? 

[editar] Mi pregunta era cómo crear tablas de forma individual. No sabía que esta era mi pregunta hasta que hice la pregunta equivocada lo suficiente como para llegar a la pregunta correcta.

Respuesta

6

La solución adecuada sobre actualización es conseguir la mesa y crear de forma individual, como por ejemplo:

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) 

y, por descalificación:

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