使用Python部署数据库更改

时间:2011-02-25 00:22:52

标签: python sql postgresql continuous-integration

我想知道是否有人可以通过python推荐一个好的模式来部署数据库更改。

在我的场景中,我有一个或多个PostgreSQL数据库,我正在尝试为每个数据库部署代码库。以下是我的SQL脚本的目录结构示例:


my_db/
    main.sql
    some_directory/
        foo.sql
        bar.sql
    some_other_directory/
        baz.sql

以下是main.sql中的内容示例


/* main.sql has the following contents: */
BEGIN TRANSACTION
\i some_directory/bar.sql
\i some_directory/foo.sql
\i some_other_directory/baz.sql
COMMIT;

如您所见,main.sql定义了特定的操作顺序和数据库更新的事务。

我还有一个python / twisted服务监视SVN以更改此db代码,我想在从svn存储库中发现新内容时自动部署此代码。

有人可以推荐一个好的模式在这里使用吗?

我应该解析每个文件吗? 我应该炮轰psql吗? ...

2 个答案:

答案 0 :(得分:1)

如果您控制所有服务器并且它们都是postgresql服务器,那么您所做的实际上是一种不错的方法。

更通用的方法是拥有一个“迁移”目录,这些目录通常是带有apply()和undo()的类,它们实际上在数据库中完成工作,并且通常带有 像.create_table()这样的抽象,它生成特定于你正在使用的任何RDBMS的DDL指令。

通常,您有一些命名约定,可确保迁移按创建顺序运行。

有一个名为South的python迁移库,虽然它似乎专门针对django开发。 http://south.aeracode.org/docs/about.html

答案 1 :(得分:1)

我们刚刚集成sqlalchemy-migrate,它具有一些非常漂亮的Rails惯例,但具有SQLAlchemy的强大功能。它正在成为一个非常棒的产品,但确实有一些垮台。虽然整合起来非常无缝。