Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python orm_Python_Database_Django_Django Models - Fatal编程技术网

python orm

python orm,python,database,django,django-models,Python,Database,Django,Django Models,这是一个新手理论问题——我刚刚开始使用Python并研究Django和orm。问题:如果我开发我的对象,并通过额外的开发修改基本对象结构、继承等-Django的ORM解决方案会自动修改数据库还是需要执行转换(如果应用程序是实时的) 所以,我从一个基本的手机应用开始 对象人:姓名、地址、城市、州、邮编、电话 我改成 对象人:标题、姓名、地址、城市、州、邮政编码、电话对象 对象电话:类型,电话# 我是通过db手动转换并更改代码,还是ORM中间件进行更改?如果是这样的话,那怎么办?Django的书在接

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

所以,我从一个基本的手机应用开始 对象人:姓名、地址、城市、州、邮编、电话 我改成 对象人:标题、姓名、地址、城市、州、邮政编码、电话对象 对象电话:类型,电话#


我是通过db手动转换并更改代码,还是ORM中间件进行更改?如果是这样的话,那怎么办?

Django的书在接近本章结尾的地方(或在网页版的页面底部)介绍了这个问题。基本上,规则是:

  • 添加字段时,首先手动将其添加到数据库中(使用,例如,
    altertable
    ),然后将字段添加到模型中。(您可以使用
    manage.py sqlall
    查看要执行的SQL语句。)
  • 删除字段时,请将其从模型中删除,然后执行适当的SQL语句以删除该列(例如,
    altertable
    命令)以及创建的所有联接表
  • 重命名字段基本上是添加/删除字段以及复制数据的组合
因此,为了回答您的问题,在Django的例子中,不,ORM不会为您处理修改——但它们并不难做到。有关更多信息,请参阅本书的那一章(上面链接)。

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


Django模式迁移有一些工具即将出现。(我在看。)

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

我们的目录是这样的

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,然后修改该应用程序

A
manage.py syncdb
将创建新的appB_2

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


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

-1与使用原始SQL迁移或django evolution或South等工具相比,这是一个非常麻烦的解决方案。我不推荐任何一个刚开始使用它的人使用它。我使用的是South,不仅仅是观看它,而且它比“删除模式并让Django重新创建它”或“自己手动更改模式”要好得多