用Python部署数据库变更
我在想有没有人能推荐一个好的方法,用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,以便发现这个数据库代码的变化,我希望在发现新内容时,能够自动部署这些代码。
有没有人能推荐一个好的方法来实现这个?
我应该解析每个文件吗?我需要调用psql命令吗?
...2 个回答
1
我们刚刚把 sqlalchemy-migrate 集成进来了,这个工具有点像 Rails 的一些习惯用法,但又结合了 SQLAlchemy 的强大功能。它正在变得非常棒,但也有一些不足之处。不过,集成起来还是挺顺利的。
1
你现在做的其实是个不错的方法,前提是你控制所有的服务器,而且这些服务器都是用postgresql数据库。
不过,还有一种更通用的方法,就是建立一个“迁移”的目录,这里边通常会有一些类,这些类里有个apply()和undo()的方法,专门用来在数据库里执行操作。它们通常还会提供一些简单的功能,比如.create_table(),可以生成适合你使用的关系型数据库管理系统(RDBMS)的指令。
一般来说,你会有一些命名规则,确保这些迁移按照创建的顺序执行。
在Python中,有一个叫South的迁移库,不过它主要是针对django开发的。 http://south.aeracode.org/docs/about.html