100.根据已有的表生成ORM模型

根据已有的表自动生成模型:

1. 在实际的开发当中有些网站是通过php等开发的,之后如果使用django开发的话,其中的一些表是已经存在的,所以,我们就要通过一些命令来将数据库中的很多表生成对应的orm模型。

2. 具体执行步骤为:

(1)在项目的settings.py文件中配置好数据库的连接工作:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'table_orm_demo02',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': '127.0.0.1',
        'PORT': '3306'
    }
}
(2)在终端命令行窗口进入项目所在的虚拟环境:workon 虚拟环境名称(table_orm_demo02)。在终端进入项目所在的目录,将数据库中已经存在的表生成ORM模型,执行命令:python manage.py inspectdb。将生成的表的ORM模型映射到项目的models.py文件中,执行命令:python manage.py inspectdb > models.py.这样就会在项目的models.py文件中生成相应的ORM模型,之后可以根据模型的相关信息将各个模型分类到不同的app中,之后修改ORM模型之间的关系,如果字段之间是使用外键的形式相关联的,那么引用的app要作为字符串的形式传递,如果使用以下这种形式的话,如果所引用的ORM模型在该模型的下面就会引用不成功,如下:
class BookOrder(models.Model):
    price = models.FloatField()
    book = models.ForeignKey(Book, models.DO_NOTHING)
    # 可以修改为:将引用的模型作为字符串的形式
    book = models.ForeignKey(Book, models.DO_NOTHING)
    
class Book(models.Model):
    name = models.CharField(unique=True, max_length=100)
    pages = models.IntegerField()
注意:如果只是想要转换为一个表的模型,那么就可以指定表的名字,示例命令如下:
python manage.py inpectdb article > models.py
(3)另外需要注意的一点是:在进行模型的映射的时候,会在每个ORM模型中的Meta类中生成一个属性managed=False,这个一定要删除,否者的话,django就不能管理生成的ORM模型。
(4)在定义外键的时候,由表生成的ORM模型在引用的外键被删除的时候,所做的处理是:models.DO_NOTHING,这个可以根据项目的实际需求进行更改。
(5)可以修改生成的ORM模型的名字,但是不能够修改表的名字,如果修改了表名,就不能够和数据库中的表相对应,同时,还需要修改数据库中的表名。
(6)执行命令:python manage.py makemigrations 生成初始化的迁移脚本,方便后面通过ORM来管理表。这时候还需要执行命令python manage.py migrate {appname} --fake-initial 将生成的迁移脚本映射到数据库表中的记录,记录到数据库中的django-migrations中,之后既可以正常的使用python manage.py makemigrations和python manage.py migrate了。
(7)将Django的核心表映射到数据库中:Django中还有一些表也是需要创建的,如果这个数据库之前就是使用Django开发的,那么这些表就已经存在了,可以不用管了。如果之前这个数据库不是用Django开发的,那么就应该使用migrate命令将Django中的核心模型映射到数据库中。
发布了131 篇原创文章 · 获赞 30 · 访问量 8386

猜你喜欢

转载自blog.csdn.net/zjy123078_zjy/article/details/104231959