gpt4 book ai didi

database - 在 Django 中更改数据库表

转载 作者:太空狗 更新时间:2023-10-30 01:37:42 26 4
gpt4 key购买 nike

我正在考虑将 Django 用于我开始的项目(仅供引用,基于浏览器的游戏),我最喜欢的功能之一是使用 syncdb 自动创建基于我定义的 Django 模型的数据库表(我似乎无法在任何其他框架中找到的功能)。当我在 documentation 中看到这个时,我已经在想这好得令人难以置信。 :

Syncdb will not alter existing tables

syncdb will only create tables for models which have not yet been installed. It will never issue ALTER TABLE statements to match changes made to a model class after installation. Changes to model classes and database schemas often involve some form of ambiguity and, in those cases, Django would have to guess at the correct changes to make. There is a risk that critical data would be lost in the process.

If you have made changes to a model and wish to alter the database tables to match, use the sql command to display the new SQL structure and compare that to your existing table schema to work out the changes.

似乎必须“手动”更改现有表格。

我想知道的是最好的方法。我想到了两个解决方案:

  • 按照文档的建议,在数据库中手动进行更改;
  • 备份数据库,删除它,再次创建表(使用 syncdb,因为现在它是从头开始创建表)并导入备份数据(如果数据库很大,这可能需要很长时间)

有什么想法吗?

最佳答案

手动执行 SQL 更改和转储/重新加载都是选项,但您可能还想检查一些 Django 的模式演变包。最成熟的选项是 django-evolutionSouth .

编辑:嘿,来了dmigrations .

更新:由于这个答案最初是写的,django-evolutiondmigrations都停止了积极的发展和South已经成为 Django 模式迁移的事实标准。 South 的部分功能甚至可能会在下一两个版本中集成到 Django 中。

更新:Django 1.7+ 中包含一个基于 South(由 South 的作者 Andrew Godwin 编写)的模式迁移框架。

关于database - 在 Django 中更改数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35991/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com