用Python部署数据库变更

0 投票
2 回答
1171 浏览
提问于 2025-04-16 12:30

我在想有没有人能推荐一个好的方法,用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

撰写回答