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

kes*_*kes 7 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 ---
Run Code Online (Sandbox Code Playgroud)

其中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
Run Code Online (Sandbox Code Playgroud)

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

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

当使用Pyramid和SQLAlchemy时,它是生产中用于以这种方式初始化的数据库的典型模式,还是通常使用manage syncdb与Django中的命令等效的东西来手动调用?

Mic*_*kel 10

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

关于使用SQLAlchemy,可以使用SQLAlchemy-migrate软件包管理迁移.设置此选项后,它将为您提供manage执行迁移的命令.

  • 这不是在生产站点中完成的方式,而是方便教程.迁移总是可变的.Django有South,SQLAlchemy有SQLAlchemy-migrate,你也可以随时使用原始的SQL迁移脚本.初始化和迁移数据库几乎总是因项目或公司而异. (4认同)
  • 澄清:我很可能计划使用SQLAlchemy(我也是新手).虽然我确实觉得金字塔的设计理念很吸引人,但我还没有找到任何关于如何使用它的好例子.上面的教程示例是进行数据库初始化的合法常用方法吗?或者这应该被视为玩具"Hello World"网站?(我正在努力做到尽我所能避免重新发明方形轮syncdb命令的前景). (2认同)