• 03-Django模型类


    ORM框架:对象-关系-映射

    将面向对象语言程序中的对象自动持久化到关系数据库中。本质就是将数据从一种形式转换到另外一种形式
    O表示Object 对象类
    R表示Relations 关系,关系数据库中的表
    M表示Mapping 映射,它的作用就是建立O和R之间的联系
    通过类和对象操作数据库表,不需要写sql语句
    在Django中已经内置了ORM框架,这个框架将类和数据表进行对应起来,只需通过类和对象就可以对数据表进行操作,也可以通过设计的模型类生成数据库中的表

    模型类

    1. 设计模型类
    from django.db import models
    
    # Create your models here.
    
    class BookInfo ( models.Modeles ):
        """
        图书模型类
            1.图书名称,CharField 说明是一个字符串,max_length字符串的最大长度,与数据库表对应
            2.出版日期,DateField是一个日期类型
            数据里表里还有一个主键id,id在Django里会自动生成,不需要定义
        """
        btitle = models.CharField ( max_length=20 )
        bpub_date = models.DateField ()
    
    
    2、根据模型类生成表
    • 生成迁移文件,迁移文件是根据模型类生成的, 使用命令 python manage.py makemigrations

    • 执行迁移文件生成表,使用命令 python manage.py migrate

    Django项目默认使用的数据库是sqlite3,可以在settings里看到,在项目下会生成一个db.sqlite3,如何打开?

    1)安装
       sudo  apt-get  install sqliteman
    
    2)输入命令sqliteman  回车就会打开
    3)File--open,选择db.sqlite3文件打开
    

    根据模型类生成的表,表名是应用名_模型类名小写

    3、根据模型类操作数据库表的增删改查

    进入项目的shell环境
    命令:python manage.py shell

    • 向表里插入数据

    from booktest.models import BooKInfo # 应用名 类名
    b=BookInfo() # 定义一个BookInfo类对象
    b.btitle='红楼梦' # 定义b对象的属性并赋值
    from datetime import date
    b.bpub_date = date(1990,1,1) # 定义出版日期
    b.save()

    • 查表里的数据

    b2=BookInfo.objects.get(id=1)
    type(b2)
    b2.btitle # 回车显示 红楼梦

    • 更新数据库表

    b2.bpub_date=date(1990,10,10)
    b2.save()

    • 删除数据

    b2.delete()

    4、模型类关系和关系查询

    (多表之间有关联)

    # 人物类
    # 人物名 hname
    # 性别 hgender
    # 年龄 hage
    # 关系属性 hbook 建立图书类与人物类之间的一对多的关系 的属性
    class  HeroInfo(models.Models):
        hname=models.CharField(max_length=20)
        # default 指定默认值,False代表男
        hgender=models.BooleanFiled(defalut=False)
        
        hbook=models.ForeignKey('BookInfo') # 建立两表之间的关联
    
    

    -->生成迁移文件-->根据迁移文件生成表,hbook在生成的表后,表里的字段对应为hbook_id,固定格式:关系属性名_id
    -->插入数据

    from booktest.models import BooKInfo,HeroInfo b = BookInfo()
    b.btitle='红楼梦'
    from datetime import date
    b.bpub_date = date(1990,1,1)
    b.save()
    h = HeroInfo()
    h.hname='林黛玉'
    h.hgender=True
    h.hbook_id = b # 指定book表里的主键id
    h.save() h2=HeroInfo() # 在增加一条数据
    h2.hname='贾宝玉'
    h2.hbook=b
    h2.save()

  • 相关阅读:
    目标需要分解,行动需要激励
    无助和愤怒都有
    一文搞懂MySQL事务的隔离性如何实现|MVCC
    面试官:请分析一条SQL的执行
    浅谈最长公共子序列引发的经典动态规划问题
    一篇文章带你搞懂InnoDB的索引|结合样例
    Docker
    mac上软件闪退找到错误原因
    前端面试题整理——webpack相关考点
    前端面试题整理——React考点和回答
  • 原文地址:https://www.cnblogs.com/wysk/p/11287133.html
Copyright © 2020-2023  润新知