python - 如何在发布后更新数据库驱动的应用程序?

标签 python database migration sqlalchemy

我正在开发一个高度依赖数据库驱动的网络应用程序。我即将发布初始版本,因此我已锁定此版本的功能,但在发布后将实现许多其他功能。这些功能不可避免地需要对数据库模型进行一些修改,因此我担心每次发布时迁移数据库的复杂性。我想知道的是,我现在应该在多大程度上关注锁定可靠的数据库设计以便我可以快速发布,而不是现在就尝试预测某些功能以便我可以在发布前将其构建到数据库中?我也预计会发现我当前模型的缺陷,然后可能想对其进行更改,但如果我发布应用程序然后数据开始进来,迁移数据将是我想象的一项艰巨任务。是否有常规方法来解决此类问题?指向正确方向的观点将非常有用。

为了了解一些背景知识,我正在为 CG 制作流程开发一个 Assets 管理系统。如此多的数据,它们之间有很多联系。它是基于网络的,完全用 Python 编写,并使用带有 SQLite 引擎的 SQLAlchemy。

最佳答案

管理生产应用程序数据库的一些想法:

  1. 每晚进行备份。这一点至关重要,因为如果您尝试更新(对数据或架构),但搞砸了,您将需要能够恢复到更稳定的状态。

  2. 创造环境。您应该拥有用于开发的数据库的本地副本、供其他人在上线前查看和测试的暂存数据库,当然还有您的实时系统指向的生产数据库。

  3. 在开始本地开发之前,请确保所有三个环境都同步。这样您就可以跟踪随时间发生的变化。

  4. 开始编写脚本并对其进行版本控制。确保将它们存储在源代码控制系统(SVN、Git 等)中。您只需要更改内容的历史记录以及需要在给定版本中运行的一小组脚本。只是帮助您保持井井有条。

  5. 对本地数据库进行更改并进行测试。确保您有执行两件事的脚本,1) 修改数据或架构的脚本,2) 用于撤消您所做的操作以防万一出现问题的脚本。在本地反复测试这些。运行脚本,测试然后回滚。还好吗?

  6. 在暂存上运行脚本,看看是否一切正常。这只是另一个证明您的工作是好的并且如果需要您可以撤消更改的机会。

  7. 一旦暂存良好并且您感到自信,就可以在生产数据库上运行您的脚本。请记住,您有用于更改数据(更新、删除语句)的脚本和用于更改架构(添加字段、重命名字段、添加表)的脚本。

一般来说,慢慢来,在你的行为中非常谨慎。你越自律,你就会越自信。更新数据库可能很可怕,所以不要着急,写下你的行动计划,然后测试、测试、测试!

关于python - 如何在发布后更新数据库驱动的应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14364214/

相关文章:

java - Hibernate 违反多对多完整性约束

database - 将用户上传的文件存储在网络服务器上

ruby-on-rails - rake 数据库 :migrate - how do I undo all migrations and redo them

php - 将 PHP 序列化从 PHP 5.3 迁移到 PHP 5.6

python - 在 Django 中将 Self 定义为多个属性

python - 将 PyGame 黑白显示转换为 7x5 位矩阵

python - 如何仅使用一次传递创建文件的多个哈希值?

python - Pygame中如何动态显示?

php - 多个插入到一个表和多对多表

php - CakePHP 迁移脚本不更新表模型