2011-07-19 20 views
7

Noté en el Pyramid + SQLAlchemy + URL Dispatch Wiki Tutorial que la base de datos se inicializa en la función principal cuando se ejecuta la aplicación.Pyramid equivalente al comando syncdb de Django?

def main(global_config, **settings): 
    """ This function returns a WSGI application. 
    """ 
    engine = engine_from_config(settings, 'sqlalchemy.') 
    initialize_sql(engine) 
    # -- and so on --- 

donde initialize_sql se define como sigue:

def initialize_sql(engine): 
    DBSession.configure(bind=engine) 
    Base.metadata.bind = engine 
    Base.metadata.create_all(engine) 
    try: 
     session = DBSession() 
     page = Page('FrontPage', 'initial data') 
     session.add(page) 
     transaction.commit() 
    except IntegrityError: 
     # already created 
     pass 

que esencialmente crea todas las tablas (si es que no existen) y lo llena con algunos valores iniciales. Lo suficientemente fácil de entender, PERO ...

Esto es solo un tutorial para demostrar una pequeña aplicación, por lo que la forma en que normalmente se realiza en la producción puede diferir (o no ...). Esto me lleva a mi pregunta:

Al usar Pyramid con SQLAlchemy, ¿es un patrón típico en producción para una base de datos inicializarse de esta manera, o es típico usar algo equivalente a un comando manage syncdb en Django que se invoca? ¿a mano?

Respuesta

10

Dado que Pyramid no hace suposiciones sobre los modelos de datos, no intenta administrarlos por usted. Esto depende totalmente de usted y de la capa de datos específica que esté utilizando.

Con respecto al uso de SQLAlchemy, es posible administrar las migraciones utilizando el paquete SQLAlchemy-migrate. Cuando lo configura, le proporciona un comando manage para realizar migraciones.

+2

Para aclarar: Probablemente estoy planeando usar SQLAlchemy (que también soy nuevo). Si bien encuentro atrayente la filosofía del diseño de Pyramid, no he encontrado ningún buen ejemplo de cómo se usa habitualmente. ¿Es el ejemplo del tutorial anterior una forma legítima y común de realizar la inicialización de db? ¿O debería tratarse como un sitio de juguetes "Hello World"? (Estoy tratando de hacer lo que pueda para evitar la posibilidad de reinventar un comando syncdb de rueda cuadrada). – kes

+4

No es así como se hace en los sitios de producción, pero es conveniente para los tutoriales. Las migraciones son algo que siempre es variable. Django tiene South, SQLAlchemy tiene SQLAlchemy-migrate, y siempre puedes usar scripts de migración SQL sin procesar. Inicializar y migrar una base de datos casi siempre es diferente de un proyecto a otro o de una compañía a otra. –

Cuestiones relacionadas