如何更新Turbogears应用程序的生产数据库

1 投票
4 回答
911 浏览
提问于 2025-04-11 20:22

我现在有一个在生产环境中的Postgres数据库,这个数据库里存了很多数据。现在我需要修改tg-app的模型,往数据库里添加几个新表。

我该怎么做呢?我正在使用sqlAlchemy。

4 个回答

1

我大致同意约翰

就我个人而言,我在TurboGears下使用SQLAlchemy作为对象关系映射工具(ORM)。为了进行数据库结构的迁移,我会运行:

tg-admin sql status

这样可以查看当前数据库和开发数据库结构之间的差异,然后手动编写(并进行版本控制)DDL脚本来进行所需的更改。

对于那些单独使用SQLAlchemy的人(也就是说,不在TurboGears下使用),sql status功能非常简单,可以在TG的源代码中找到,链接是:http://svn.turbogears.org/branches/1.1/turbogears/command/sacommand.py(在1.0分支中也有适用于旧版Python和SQLAlchemy的版本)。

1

最简单的方法就是写一些 SQL 更新脚本,用它们来更新数据库。显然,这是一种比较基础的方法。

如果你觉得以后会经常这样做,并且想继续使用 Python,可以考虑看看 sqlalchemy-migrate。最近的《Python Magazine》上有一篇关于它的文章。

1

这个方法总是有效,而且只需要一点耐心,不需要太多思考。

  1. 先备份。

  2. 真的要备份。很多人都跳过这一步,以为自己已经备份了,但实际上找不到或者用不了。不要相信那些你无法恢复的备份。

  3. 创建一个新的数据库结构。

  4. 从头开始在新的结构中定义你的新内容。理想情况下,你应该运行一个DDL脚本来构建新的结构。如果没有这样的脚本,赶紧创建一个,并把它放到版本控制里。

    使用SA(系统架构),你可以定义你的表格,它会为你构建结构。这是最理想的,因为你可以在Python中对你的结构进行版本控制。

  5. 迁移数据。

    a. 对于结构没有变化的表格,使用简单的INSERT/SELECT语句将数据从旧结构迁移到新结构。

    b. 对于结构有变化的表格,开发INSERT/SELECT脚本,将数据从旧表迁移到新表。通常,这可以是每个新表一个SQL语句。在某些情况下,可能需要用Python循环和两个打开的连接。

    c. 对于新表,加载数据。

  6. 停止使用旧结构。开始使用新结构。找到所有使用旧结构的程序,并修复它们的配置。

    没有应用程序的清单?那就做一个。真的,这很重要。

    应用程序有硬编码的数据库配置?那也要修复。可以创建一个公共配置文件,或者使用一些公共环境变量,来确保一致性,并集中管理“生产环境”的概念。

每当你进行重大修改时,都可以按照这个流程来操作。这个过程不会影响旧数据库,除了提取数据。

撰写回答