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

2024-05-15 12:29:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个非常受数据库驱动的web应用程序。我已经接近初始版本了,所以我已经锁定了这个版本的特性,但是在发布之后会有很多其他的特性被实现。这些特性将不可避免地需要对数据库模型进行一些修改,因此我担心在每个版本上迁移数据库的复杂性。我想知道的是,我应该在多大程度上考虑现在锁定一个可靠的数据库设计,这样我就可以快速发布,而不是现在尝试预测某些特性,这样我就可以在发布之前将其构建到数据库中?我也期望找到我当前模型的缺陷,然后可能会想对其进行更改,但如果我发布应用程序,然后数据开始进入,迁移数据将是一项困难的任务,我想。有没有解决这类问题的常规方法?一个正确的方向是非常有用的。你知道吗

作为一点背景知识,我正在为CG生产线开发一个资产管理系统。所以很多数据之间有很多联系。它是基于web的,完全用Python编写,并且使用SQLAlchemy和SQLite引擎。你知道吗


Tags: 数据方法模型版本web数据库应用程序特性
2条回答

我看到(并且喜欢)的一种方法是一个名为versions的表,它只包含一个id。你知道吗

然后有一个updates.sql脚本,其结构类似于:

DELIMITER $$

CREATE PROCEDURE IF NOT EXISTS DBUpdate()
BEGIN

IF (SELECT id FROM versions) = 1 THEN
  CREATE TABLE IF NOT EXISTS new_feature_table(
     id INT PRIMARY KEY AUTO-INCREMENT,
     blah VARCHAR(128) ...,
  );

IF (SELECT id FROM versions) = 2 THEN
  CREATE TABLE IF NOT EXISTS newer_feature_table(
     id INT PRIMARY KEY AUTO-INCREMENT,
     blah VARCHAR(128) ...,
  );

END$$

DELIMITER ;

CALL PROCEDURE DBUpdate();

然后编写一个python脚本来检查存储库的更新,连接到db,并通过以下过程运行对模式的任何更改。这很好,因为您只需要一个具有适当id值的versions表来构建整个数据库(没有数据,也就是说,请参阅ryan1234关于数据备份的回答)。你知道吗

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

  1. 每晚备份。这一点非常重要,因为如果您试图更新(数据或模式),并且搞砸了,您需要能够恢复到更稳定的状态。

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

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

  4. 开始编写脚本并为发布版进行版本设置。确保将它们存储在源代码管理系统(SVN、Git等)中,您只需要更改内容的历史记录,以及需要在给定版本中运行的一小部分脚本。只是帮你保持条理。

  5. 对本地数据库进行更改并进行测试。确保您有两个脚本,1)修改数据的脚本,或模式的脚本,2)在出错时撤消所做的操作的脚本。在本地反复测试。运行脚本,测试然后回滚。一切还好吗?

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

  7. 一旦准备就绪并且您感到有信心,就在生产数据库上运行您的脚本。请记住,您有用于更改数据的脚本(update、delete语句)和用于更改模式的脚本(添加字段、重命名字段、添加表)。

总的来说,慢慢来,在行动上要非常慎重。你越有纪律就越有信心。更新数据库可能很可怕,所以不要着急,写下你的行动计划,然后测试,测试,测试!你知道吗

相关问题 更多 >