Pyramid中等同于Django的syncdb命令是什么?

7 投票
1 回答
1214 浏览
提问于 2025-04-16 21:52

我在这个Pyramid + SQLAlchemy + URL Dispatch Wiki教程中注意到,当应用程序运行时,数据库是在主函数中初始化的。

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 个回答

10

Pyramid这个框架不对数据模型做任何假设,所以它不会帮你管理这些数据模型。管理数据模型的事情完全由你自己决定,具体要用什么数据层也由你来选择。

如果你使用SQLAlchemy这个工具,可以通过SQLAlchemy-migrate这个包来管理数据迁移。当你设置好这个包后,它会给你一个manage命令,让你可以进行数据迁移。

撰写回答