为什么Django不“真正”支持自动表更新?

时间:2009-07-22 22:52:18

标签: mysql django django-database

最近我一直在努力学习Django的网页开发,我很高兴...

但是,有一点真的很烦人 - 特别是当你对django背后的'简单'哲学有所了解时。

更新django中的表格远非我刚刚经历过的简单。

例如,就像我的真实情况一样,我跳过了为条目标题添加一个slug字段。但过了一段时间,我想在表中添加一个slug列,就像所有人一样 - 这是django中的新手可能期望的,我尝试了python manage.py syncdb命令。当然它不起作用......经过一番搜索后我发现“我需要在dbshel​​l命令行中手动添加一个新列”(我使用的数据库是mysql)。

我不知道为什么,但我认为这是一个非常有趣的事情,在我看到在django中创建一个简单的网站之后,我从未想到过。难道你们都不这么认为吗?或者,如果您有任何其他解决方案或任何其他内容,请与您分享?

提前致谢...

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

5 个答案:

答案 0 :(得分:6)

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

有关这些第三方迁移工具的详细信息,请查看this question.

的答案

答案 1 :(得分:3)

我使用South来帮助阻止这些问题(尽管重新命名字段似乎有问题)。

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

他们做到了这一点,您可以轻松快速地创建数据库。不幸的是,他们没有让表格更新变得容易,你必须手动做一个ALTER TABLE。我认为他们可能正在为Django 1.1修复此问题,但我对此并不完全确定。