蟒蛇

时间:2009-05-19 21:41:12

标签: python database django django-models

这是一个新手理论问题 - 我刚开始使用Python并研究Django和orm。问题:如果我开发我的对象并通过其他开发修改基础对象结构,继承等 - Django的ORM解决方案会自动修改数据库还是我需要执行转换(如果应用程序是实时的)?

所以,我从一个基本的手机应用程序开始 对象人:姓名,地址,城市,州,邮编,电话 然后我改变了 对象人:标题,姓名,地址,城市,州,邮编,电话对象 对象电话:类型,电话#

我是否通过数据库手动转换并更改代码或ORM中间件是否进行了更改?如果是的话 - 如何?

3 个答案:

答案 0 :(得分:5)

从Django 1.02开始(以及最新的subversion版本1.1),没有自动的“模式迁移”。您的选择是删除架构并让Django重新创建它(通过manage.py syncdb),或者自己手动更改架构。

Django架构迁移有一些工具可供使用。 (我正在看South。)

答案 1 :(得分:4)

Django书在本章末尾(或页面底部,网络版)附近的Chapter 5中介绍了这个问题。基本上,规则是:

  • 添加字段时,首先手动将其添加到数据库中(使用例如ALTER TABLE),然后将字段添加到模型中。 (您可以使用manage.py sqlall查看要执行的SQL语句。)
  • 删除字段时,将其从模型中删除,然后执行相应的SQL语句以删除列(例如,ALTER TABLE命令)以及已创建的任何连接表。
  • 重命名字段基本上是添加/删除字段以及复制数据的组合。

所以回答你的问题,在Django的情况下,不,ORM将为你处理修改 - 但它们并不难做到。有关详细信息,请参阅本书的这一章(上面链接)。

答案 2 :(得分:0)

我们在应用程序名称中包含“版本”号。

我们的目录看起来像这样

project
    settings.py
    appA_1
        __init__.py
        models.py
        tests.py
    appB_1 
        __init__.py
        models.py
        tests.py   
    appB_2
        __init__.py
        models.py
        tests.py

这显示了两个版本的appB。 appB_1是原始版本。当我们更改模型时,我们首先复制应用程序以创建appB_2,然后修改该模型。

manage.py syncdb将创建全新的appB_2。

我们必须通过从appB_1复制到appB_2来卸载和重新加载表格。一次。

然后我们可以从settings.py中删除appB_1。稍后我们可以从数据库中删除这些表。