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?
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
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. –