2008-11-19 61 views

回答

1

这总是有效,需要一点思考 - 只有耐心。

  1. 进行备份。

  2. 其实做一个备份。每个人都跳过第1步,认为他们有备份,但他们永远无法找到它或使用它。不要相信任何无法从中恢复的备份。

  3. 创建一个新的数据库模式。

  4. 从新模式中从头开始定义新结构。理想情况下,您将运行构建新架构的DDL脚本。没有脚本来构建模式?创建一个并将其置于版本控制之下。

    使用SA,您可以定义您的表格,并且可以为您构建您的架构。这是理想的,因为你的Python在版本控制下拥有你的模式。

  5. 移动数据。

    a。对于没有更改结构的表,使用简单的INSERT/SELECT语句将数据从旧模式移动到新模式。

    b。对于确实改变了结构的表,开发INSERT/SELECT脚本将数据从旧数据移动到新数据。通常,这可以是每个新表的单个SQL语句。在某些情况下,它必须是一个具有两个打开连接的Python循环。

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

  6. 停止使用旧的模式。开始使用新的模式。找到所有使用旧模式并修复配置的程序。

    没有应用程序列表?做一个。认真 - 这很重要。

    应用程序具有硬编码的数据库配置?解决这个问题,当你在它的时候。要么创建一个通用的配置文件,要么使用一些常见的环境变量,或者(a)确保一致性,(b)集中“生产”的概念。

你可以在你做大手术时做这种手术。除了提取数据之外,它不会触及旧数据库。

+0

OP提到他拥有“大量数据”:如果选择/插入循环意味着数小时或数天的缓慢,宕机或数据丢失,则可能导致选择/插入循环不切实际。 相反,您是否可以从新配置的主配置复制到新配置的从配置? – 2008-12-24 00:15:19

0

如果你只是添加表,并没有修改任何已在其现有的数据表,你可以简单地添加新的SQLAlchemy的表定义到model.py,并运行:

tg-admin sql create 

这不会覆盖您现有的任何表格。

对于模式迁移,您可以看看http://code.google.com/p/sqlalchemy-migrate/,尽管我自己还没有使用它。

始终在迁移活动之前备份生产数据库。

1

最简单的方法是简单地编写一些sql更新脚本并使用它们来更新数据库。显然,这是一个相当低级的(原样)方法。

如果你认为你会做很多事情,并希望坚持Python,你可能想看看sqlalchemy-migrate。在最近的Python杂志中有一篇关于它的文章。

1

我会同意John。对于大型数据库来说,单步选择和插入将不实用,并且设置复制或多通差分SELECT/INSERT可能会更困难并且更容易出错。

就我个人而言,我使用SQLAlchemy作为TurboGears下的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/SA版本的版本,太)。

相关问题