我有一些模型,我正在使用一个新的Django安装.是否可以在不丢失应用数据的情况下更改字段?
我尝试改变现场并运行python manage.py syncdb
.此命令没有输出.
当Django试图显示db中不存在的字段时,导航到管理页面以编辑已更改的模型会导致TemplateSyntaxErrors.
我正在使用SQLite.
我能够删除db文件,然后重新运行python manage.py syncdb
,但这有点痛苦.有没有更好的方法呢?
JAL*_*JAL 20
Django永远不会改变现有的数据库列.Syncdb将创建表,但它不会像Rails中那样进行"迁移".如果您需要这样的东西,请查看Django South.
请参阅syndb的文档:
Syncdb不会更改现有表
syncdb仅为尚未安装的模型创建表.它永远不会发出ALTER TABLE语句来匹配安装后对模型类所做的更改.对模型类和数据库模式的更改通常涉及某种形式的歧义,在这些情况下,Django必须猜测要进行的正确更改.存在关键数据在此过程中丢失的风险.
如果您对模型进行了更改并希望更改数据库表以匹配,请使用sql命令显示新的SQL结构,并将其与现有的表模式进行比较以计算更改.
您必须通过sqlite提供的任何管理工具手动更改数据库中的列名称.例如,我已经使用MySQL完成了这项工作,并且由于MySQL允许您在不影响数据的情况下更改列名,因此没有问题.
如果您只是在谈论添加/删除列,则必须手动更新数据库架构/布局.
如果您尝试重命名列,则必须找到另一种方法.
您可以使用python manage.py sql [app name]
(http://docs.djangoproject.com/en/dev/ref/django-admin/#sql-appname-appname)命令查看新SQL应该是什么样的,看看哪些列,什么类型/规范Django会添加,然后手动运行相应的ALTER TABLE
命令.
有一些应用程序/项目可以实现更轻松的模型/数据库管理,但是Django不会出于目的/设计而开箱即用.