zoukankan      html  css  js  c++  java
  • Django 第十课 1.【ORM模型】

    ORM模型介绍

    随着项目的越来越大,采用写原生SQL的方式在代码中会出现大量的SQL语句,那么问题就出现了:

    1:SQL语句重复利用率不高,越复杂的SQL语句条件越多,代码越长。会出现很多相近的SQL语句

    2:很多SQL语句是在业务逻辑中拼出来的,如果有数据库需要更改,就要去修改这些逻辑,这会很容易漏掉对某些SQL语句的修改

    3:写SQL时容易忽略web安全问题,给未来造成隐患。如,SQL注入

    ORM, 全称object relational Mapping ,中文叫做对象关系映射,通过ORM我们可以通过类的方式操作数据库,而不用再写原生的SQL语句。通过把表映射成类,把行作为实例,把字段作为属性,ORM在执行对象操作的时候最终还是会把对应的操作转换为数据库原生语句。使用ORM有许多优点:

    1:易用性:使用ORM做数据库的开发可以有效的减少重复SQL语句的概率,写出的模型也更加直观,清晰。

    2:性能损耗小:ORM转换成底层数据库操作指令确实会有一些开销。但是从实际的情况看,这种损耗很少(不足5%),只要不是对性能有严苛的要求,综合考虑开发效率,代码的阅读性,带来的好处要远远大于性能损耗,而且项目越大作用越明显。

    3:设计灵活:可以轻松的写出复杂的查询

    4:可移植性:Django封装了底层的数据实现,支持多个关系数据库引擎,包括流行的MySQL,PostgreSQL和SQLite。可以非常轻松的切换数据库

    创建ORM模型

    ‘ORM’模型一般都是放在‘app’的 ‘models.py’ 文件中。每个app都可以拥有自己的模型。并且这个模型想要映射到数据库中,那么这个app必须要放在 ‘settings.py’ 的 ‘INSTALLED_APP’中进行安装。以下是写一个简单的书籍‘ORM’模型,示例代码如下:

    from django.db import models
    
    
    #如果要将一个普通的类变成一个可以映射到数据库中的ORM模型
    #那么必须要将父类设置为models.Model或者他的子类
    class Book(models.Model):
        #1. id:int类型,是自增长的
        id = models.AutoField(primary_key=True)
        #2. name:varchar(100)。图书名字
        name = models.CharField(max_length=100, null=False)
        #3. author:varchar(100)。作者名字
        author = models.CharField(max_length=100, null=False)
        #4. price:float。价格
        price = models.FloatField(null=False, default=0)
    
    
    class Publisher(models.Model):
        name = models.CharField(max_length=100, null=False)
        address = models.CharField(max_length=100, null=False)
    
    #终端进入项目目录,进行虚拟环境
    #1. 使用makegrations #python manage.py makemigrations #2. 使用migrate将新生成的迁移脚本文件映射到数据库中 #python manage.py migrate

    以上便定义了一个模型。这个模型继承自 ‘django.db.models.Model’,如果这个模型想要映射到数据库中,就必须继承自这个类,这个模型以后映射到数据库中,表名是模型名称的小写形式,为‘book’。在这个表中,有四个字段,如上。

    ##  映射模型到数据库中:

    将‘ORM’模型映射到数据库中,总结起来就是以下几步:

    1:在‘settings.py’ 中,配置好 'DATABASES',做好数据库相关的配置。

    2:在 ‘app’中的‘models.py’ 中定义好模型。这个模型必须继承自'django.db.models'

    3:将这个‘app’添加到‘settings.py’的 ‘INSTALLED_APP’中;

    4:在命令行终端,进入到项目所在的路径,然后执行命令 'python manage.py makemigrations',来生成迁移脚本文件

    5:同样在命令行终端中,执行 ‘python manage.py migrate’,来讲迁移脚本文件映射到数据库中。

    (django-env) macminideMac-mini:orm_intro_demo nelsen$ python manage.py makemigrations #生成脚本文件
    Migrations for 'book': book/migrations/0001_initial.py - Create model Book (django-env) macminideMac-mini:orm_intro_demo nelsen$ python manage.py migrate #将迁移脚本文件映射到数据库中
    Operations to perform:  Apply all migrations: admin, auth, book, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK
  • 相关阅读:
    2016年上半年中小学教师资格考试综合素质试题(中学)
    2015年上半年教师资格证考试《中学综合素质》真题--解析
    2014年下半年教师资格证考试《中学综合素质》真题--解析
    2014年上半年教师资格证考试《中学综合素质》真题--解析
    2013年下半年教师资格证考试《中学综合素质》真题--解析
    CSS3新特性
    到底什么是JS原型
    vue路由的两种方式(路由传参)
    vue项目实现路由按需加载(路由懒加载)的3种方式
    js中对象的合并
  • 原文地址:https://www.cnblogs.com/nelsen-chen/p/9492593.html
Copyright © 2011-2022 走看看