1

最近我一直在尝试学习 Django 中的 Web 开发,对此我感到非常高兴...

但是,有一件事真的很烦人——尤其是当您了解 django 背后的“简单”理念时。

就像我刚刚经历的那样,在 django 中更新表格真的远非简单。

例如,就像我的真实案例一样,我在开始时跳过了为条目标题添加一个 slug 字段。但是过了一会儿,我想在表格中添加一个 slug 列,就像每个 django 菜鸟可能期望的那样,我尝试了python manage.py syncdb命令。当然它没有用......经过一番搜索,我发现“我需要在 dbshel​​l 命令行中'手动'添加一个新列”(我使用的数据库是 mysql)。

我不知道为什么,但我认为这是一件非常有趣的事情,在我看到在 django 中创建网站是多么简单之后,我从未想到过。大家不这么认为吗?或者如果您有任何其他解决方案或任何即将到来的事情,您能分享一下吗?

提前致谢...

PS。我不介意在 shell 中与 db 相处,但我想知道的是为什么它在 django 中是这样的......

4

5 回答 5

6

数据库迁移是 django 项目的一个目标,但它是一个足够困难的主题,它并没有在前几个版本中结束。涌现出一批移民项目来填补这一空白,每个项目都以不同的方式解决了难题。django 团队没有尝试创建一个额外的迁移解决方案,或者在任何一个成熟之前授予一个“官方”身份,或者至少成为唯一的首选解决方案,django 团队决定让这些解决方案不断发展,并从作物中挑选一个稍后与 django 一起发布。

至于有关这些第三方迁移工具的更多信息,请查看此问题的答案。

于 2009-07-22T23:10:04.350 回答
3

我使用South来帮助阻止此类问题(尽管重命名字段似乎存在问题)。

我认为这种行为可能是由于 Django 支持的不同数据库后端,根据这些发行说明,Django 1.1RC 没有变化

于 2009-07-22T23:07:51.763 回答
1

South实际上很好地处理了 Django 迁移。网站上有很好的文档,很容易找到。

于 2012-09-22T16:31:44.430 回答
1

上面的几个答案都有很好的信息。但是,根据这个问题,提问者可能没有使用 manage.py 中的 reset 命令。在开发过程中,当您构建模型和数据时,您可能没有需要保留的数据。种子数据可以存储为 initial_data ( http://docs.djangoproject.com/en/dev/howto/initial-data/ ),并且可以在重置和同步数据库时自动或手动添加。

在开发过程中,保留可以加载的各种数据集并在 manage.py 中自由使用 reset 命令是使用不断发展的模型的关键。但是,一旦您投入生产,迁移工具(或手动数据库调整)就变得必不可少。

于 2009-07-23T15:58:32.293 回答
0

他们这样做是为了让您可以以最小的努力快速轻松地创建您的数据库。不幸的是,它们并没有让更新表变得那么容易,您必须手动执行 ALTER TABLE。我认为他们可能正在为 Django 1.1 修复此问题,但我对此并不完全确定。

于 2009-07-22T22:57:22.020 回答