• Django基础之django模型层(一)单表操作


    目录

    一 ORM简介

    二 单表操作

            一、创建表

    二、添加表纪录 

    三、查询表纪录 

    四、删除表纪录

    五、修改表纪录


    ORM简介

      

    • MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动
    • ORM是“对象-关系-映射”的简称。(Object Relational Mapping,简称ORM)(将来会学一个sqlalchemy,是和他很像的,但是django的orm没有独立出来让别人去使用,虽然功能比sqlalchemy更强大,但是别人用不了)
    • 类对象--->sql--->pymysql--->mysql服务端--->磁盘,orm其实就是将类对象的语法翻译成sql语句的一个引擎,明白orm是什么了,剩下的就是怎么使用orm,怎么来写类对象关系语句。

        

      原生sql和python的orm代码对比

     

    1. #sql中的表
    2. #创建表:
    3. CREATE TABLE employee(
    4. id INT PRIMARY KEY auto_increment ,
    5. name VARCHAR (20),
    6. gender BIT default 1,
    7. birthday DATA ,
    8. department VARCHAR (20),
    9. salary DECIMAL (8,2) unsigned,
    10. );
    11. #sql中的表纪录
    12. #添加一条表纪录:
    13. INSERT employee (name,gender,birthday,salary,department)
    14. VALUES ("alex",1,"1985-12-12",8000,"保洁部");
    15. #查询一条表纪录:
    16. SELECT * FROM employee WHERE age=24;
    17. #更新一条表纪录:
    18. UPDATE employee SET birthday="1989-10-24" WHERE id=1;
    19. #删除一条表纪录:
    20. DELETE FROM employee WHERE name="alex"
    21. #python的类
    22. class Employee(models.Model):
    23. id=models.AutoField(primary_key=True)
    24. name=models.CharField(max_length=32)
    25. gender=models.BooleanField()
    26. birthday=models.DateField()
    27. department=models.CharField(max_length=32)
    28. salary=models.DecimalField(max_digits=8,decimal_places=2)
    29. #python的类对象
    30. #添加一条表纪录:
    31. emp=Employee(name="alex",gender=True,birthday="1985-12-12",epartment="保洁部")
    32. emp.save()
    33. #查询一条表纪录:
    34. Employee.objects.filter(age=24)
    35. #更新一条表纪录:
    36. Employee.objects.filter(id=1).update(birthday="1989-10-24")
    37. #删除一条表纪录:
    38. Employee.objects.filter(name="alex").delete()

    二 单表操作

    一、创建表

        1 创建模型

          

          创建名为book的app,在book下的models.py中创建模型:

    1. from django.db import models
    2. # Create your models here.
    3. class Book(models.Model):
    4. id=models.AutoField(primary_key=True) #如果表里面没有写主键,表里面会自动生成一个自增主键字段,叫做id字段,orm要求每个表里面必须要写一个主键
    5. title=models.CharField(max_length=32) #和varchar(32)是一样的,32个字符
    6. state=models.BooleanField()
    7. pub_date=models.DateField() #必须存这种格式"2018-12-12"
    8. price=models.DecimalField(max_digits=8,decimal_places=2) #max_digits最大位数,decimal_places小数部分占多少位
    9. publish=models.CharField(max_length=32)

     

    接下来要创建对应的数据,连接上对应的数据库,然后执行创建表的命令,翻译成相应的sql,然后到数据库里面执行,从而创建对应的表。多了一步orm翻译成sql的过程,效率低了,但是没有太大的损伤,还能忍受,当你不能忍的时候,你可以自己写原生sql语句,一般的场景orm都够用了,开发起来速度更快,写法更贴近应用程序开发,还有一点就是数据库升级或者变更,那么你之前用sql语句写的数据库操作,那么就需要将sql语句全部修改,但是如果你用orm,就不需要担心这个问题,不管是你从mysql变更到oracle还是从oracle更换到mysql,你如果用的是orm来搞的,你只需要修改一下orm的引擎(配置文件里面改一些配置就搞定)就可以了,你之前写的那些orm语句还是会自动翻译成对应数据库的sql语句。

          简单提一下sqlite数据库:(先忽略)

          

          

          

        2 更多字段和参数

          每个字段有一些特有的参数,例如,CharField需要max_length参数来指定VARCHAR数据库字段的大小。还有一些适用于所有字段的通用参数。 这些参数在文档中有详细定义,这里我们只简单介绍一些最常用的:

          更多字段:

    1. '''
    2. <1> CharField
    3. 字符串字段, 用于较短的字符串.
    4. CharField 要求必须有一个参数 maxlength, 用于从数据库层和Django校验层限制该字段所允许的最大字符数.
    5. <2> IntegerField
    6. #用于保存一个整数.
    7. <3> DecimalField
    8. 一个浮点数. 必须 提供两个参数:
    9. 参数 描述
    10. max_digits 总位数(不包括小数点和符号)
    11. decimal_places 小数位数
    12. 举例来说, 要保存最大值为 999 (小数点后保存2位),你要这样定义字段:
    13. models.DecimalField(..., max_digits=5, decimal_places=2)
    14. 要保存最大值一百万(小数点后保存10位)的话,你要这样定义:
    15. models.DecimalField(..., max_digits=17, decimal_places=10) #max_digits大于等于17就能存储百万以上的数了
    16. admin 用一个文本框()表示该字段保存的数据.
    17. <4> AutoField
    18. 一个 IntegerField, 添加记录时它会自动增长. 你通常不需要直接使用这个字段;
    19. 自定义一个主键:my_id=models.AutoField(primary_key=True)
    20. 如果你不指定主键的话,系统会自动添加一个主键字段到你的 model.
    21. <5> BooleanField
    22. A true/false field. admin 用 checkbox 来表示此类字段.
    23. <6> TextField
    24. 一个容量很大的文本字段.
    25. admin 用一个