Django学习笔记【模型层、ORM框架】

153 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情 本文已参与「新人创作礼」活动,一 起开启掘金创作之路。

模型层

用来和数据库之间进行通信,使用orm操作,类似于Django配置mybatisplus框架

Django配置Mysql

  • 安装mysqlclient前需要确认系统是否安装python3-dev和default-libmysqlclient-dev
    1. sudo apt list --installed|grep -E 'libmysqlclient-dev|python3-dev
    2. 若命令无输出则需要安装 - sudo apt-get install python3-dev default-libmysqlclient-dev
  • 安装mysqlclient:pip install mysqlclient
  • 创建数据库,进入mysql数据库执行
    • create database 数据库名 default charset 'utf8'
    • 通常数据库名与项目名保持一致
  • settings.py里面进行数据库配置
    • 修改DATABASES配置项的内容,由django.db.backends.sqlite3变为django.db.backends.mysql
    • 具体如下:
      DATABASES = {
         'default': {
             'ENGINE': 'django.db.backends.mysql',
             'NAME': 'study2',
             'USER': 'root',
             'PASSWORD': 'root',
             'HOST': '127.0.0.1',
             'PORT': '3306',
         }
      }
      
  • 数据库常用操作
    # mysql登录
    mysql -u root -p
    # 创建数据库
    create database 数据库名 default charset 'utf8'
    # 查看数据库列表
    show datebases
    # 查看表列表
    show tables
    # 查看表
    desc 表名
    

ORM框架

bookstore示例

  • 添加一个bookstore的app
    python manage.py stratapp bookstart
  • 添加模型类并注册app
    • 模型类代码示例
         class Book(models.Model):
             title = models.CharField('书名', max_length=50, default='')
             price = models.DecimalField('价格', max_digits=7, decimal_places=2)
             info = models.CharField('描述', max_length=100, default='暂无描述')
      
  • 数据库迁移
    同步对模型的更改(添加字段、删除模型等)到数据库
    • 生成迁移文件 - 执行python manage.py makemigrations
      将应用下的models.py文件生成一个中间文件并保存在migrations文件夹中
    • 执行迁移脚本程序 - 执行python manage.py migrate
      同步中间件至数据库

模型类 - 字段

  • BooleanField()
    • 数据库类型:tinyint(1)
    • 编程语言中:使用TrueFalse表示值
    • 在数据库中:使用1或者0来表示具体的值
  • CharField()
    • 数据库类型:varchar
    • 注意:需要指定max_length参数值
  • DateField()
    • 数据库类型:date
    • 作用:表示日期
    • 参数(三选一):
      • auto_now:每次保存对象时,自动设置该字段为当前时间(取值:True/False)
      • auto_now_add:对象第一次被创建时,自动设置该字段为当前时间(取值:True/False)
      • default:设置当前时间(取值:字符串格式时间,如:'2019-6-1')
  • DateTimeField()
    • 数据库类型:datetime(6)
    • 作用:表示日期和时间
    • 参数同DateField()
  • FloatField()
    • 数据库类型:double
  • DecimalField()
    • 数据库类型:decimal(x,y)
    • 作用:表示小数
    • 参数(三选一):
      • max_digits:总位数
      • decimal_places:小数点后位数
  • EmailField()
    • 数据库类型:varchar
    • 作用:自带规则,如果格式不是邮箱格式,则抛出异常
  • IntegerField()
    • 数据库类型:int
    • 作用:正常不过的整数
  • ImageField()
    • 数据库类型:varchar(100)
    • 作用:保存图片路径
  • TextField()
    • 数据库类型:longtext
  • EmailField()
    • 数据库类型:varchar
    • 作用:自带规则,如果格式不是邮箱格式,则抛出异常

模型类 - 字段选项

  • primary_key
    • 如果设置为True,表示该列为主键,如果指定一个字段为主键,则此数据库表不会创建id字段
  • blank
    • 如果设置为True,字段可以为空
  • null
    • 如果设置为True,表示该列允许为空
    • 默认为False,建议加入default选项来设置默认值
  • default
    • 设置所在列的默认值
  • db_index
    • 设置为True,为该列增加索引
  • unique
    • 设置为True,则值唯一
  • db_index
    • 指定列的名称,默认为属性名
  • verbose_name
    • 设置此字段在admin界面显示的名称
  • 样例:创建一个属性,表示用户名称,长度为30个字符串,唯一,非空,添加索引
    • name = model.charField(max_length=30,unique=True,null=False,db_index=True)