金字塔相当于Django的syncdb命令?

时间:2011-07-19 21:35:31

标签: python django sqlalchemy web-frameworks pyramid

我在Pyramid + SQLAlchemy + URL Dispatch Wiki Tutorial注意到,在运行应用程序时,数据库在main函数中初始化。

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

其中initialize_sql的定义如下:

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

基本上创建所有表(如果它们不存在)并用一些初始值填充它。很容易理解,但是......

这只是一个演示小型应用程序的教程,因此通常在生产中完成的方式可能不同(或不是......)。这让我想到了我的问题:

将Pyramid与SQLAlchemy一起使用时,这是一种典型的生产模式,是否可以通过这种方式初始化数据库,或者是否经常使用与Django中manage syncdb命令相同的东西来手动调用?

1 个答案:

答案 0 :(得分:10)

由于Pyramid不对数据模型做任何假设,因此它不会尝试为您管理它们。这完全取决于您以及您正在使用的具体数据层。

关于使用SQLAlchemy,可以使用SQLAlchemy-migrate包管理迁移。设置此项时,它会为您提供manage命令来执行迁移。