Django模型

本文详细介绍了Django中的ORM框架,包括数据库配置、模型字段属性和选项、数据模型查询方法(如F对象、Q对象、聚合函数)、高级查询中的关联查询以及自定义管理器和元选项。内容涵盖了Django如何通过面向对象的方式操作数据库,以及如何进行各种复杂的查询操作。
摘要由CSDN通过智能技术生成

Django框架中ORM示意图如下:

image

Django ORM框架的功能:

  • 建立模型类和表之间的对应关系,允许我们通过面向对象的方式来操作数据库
  • 根据设计的模型类自动生成数据库中的表格
  • 通过方便的配置就可以进行数据库的切换
1. Django数据库配置

Django默认使用sqlite3数据库,当然也支持其他数据库:postgresql、mysql、oracle等。

Django配置数据库方法:修改项目配置文件setting.py内部的DATABASE项的值
- ENGINE:数据库类型,可选项如下:
    - django.db.backends.sqlite3(默认)
    - django.db.backends.postgresql
    - django.db.backends.mysql
    - django.db.backends.oracle
- NAME:数据库名称
    若使用SQlite,则数据库为一个文件,则NAME是此文件的绝对路径,包括文件名。默认值 os.path.join(BASE_DIR, 'db.sqlite3') 将会把数据库文件储存在项目的根目录
    
若使用其他数据库,需要添加额外字段值:USER、PASSWORD、HOST、PORT等

注意:

  1. sqlite之外的其他数据库,需要自己先创建数据库,且保证数据库用户有创建数据库的权限。
  2. 项目需要安装连接MySQL的第三方包:python2(mysql-python)、python3(pymysql)
  3. python3安装后需要在项目目录下__init__.py文件内,添加下面代码:
import pymysql

pymysql.install_as_MySQLdb()
2. 模型字段属性和选项
2.1 模型类属性命名限制
1. 不能为python保留关键字
2. 不允许使用连续下划线!!(因为Django查询数据的条件格式有双下划线)
3. 定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法:属性名=models.字段类型(选项)
2.2 字段类型

模型中每一个属性都应该是某个Field类的实例, Django提供一下字段类型:

字段类型 描述
AutoField 自动增长的IntegerField:通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性(主键)
BooleanField 布尔字段:值为True或False
NullBooleanField 支持Null、True、False三种值
CharField(max_length=x) 字符串:参数max_length表示最大字符个数
TextField 大文本字段:一般超过4000个字符时使用
IntegerField 整数
DecimalField(max_digits=None, decimal_places=None) 十进制浮点数:参数max_digits表示总位数,decimal_places表示小数位数
FloatField 同上
DateField([auto_now=False, auto_now_add=False]) 日期:auto_now表示每次保存对象自动设置为当前时间,默认为false(最后修改时间戳);auto_now_add表示对象第一次被创建自动设置当前时间(创建时间戳),默认为false(两参数相互排斥)
TimeField 时间:参数同DateField
DateTimeField 日期时间:参数同DateField
FileField 上传文件
ImageField 上传图片:继承于FileField,对上传的内容进行校验,确保是有效的图片
2.3 字段选项

选项就是给数据库字段进行约束,Django提供一下选项:

选项名 描述
default 默认值:设置默认值
primary_key 主键:True,该字段会成为模型的主键字段;默认值是False,一般作为AutoField的选项使用
unique 字段唯一性:True, 该字段在表中必须有唯一值;默认值是False
db_index 索引:值为True, 则在表中会为此字段创建索引;默认值是False
db_column 字段名称:未指定,则使用类属性的名称
null 空值:True,表示允许null;默认值是False
blank 空白:True,则该字段允许为空白,默认值是False

注意:

  1. null是数据库范畴的概念,blank是后台管理页面表单验证范畴的
  2. 如果一个字段设置为 blank=True ,在进行表单验证时,接收的数据该字段值允许为空,而设置为 blank=False 时,不允许为空
3. 数据模型查询
3.1 MySQL日志文件

mysql日志文件:mysql.log

日志文件记录MySQL数据库的操作记录,默认情况下mysql不产生日志文件,需要修改mysql的配置文件,步骤如下:

1. 使用下面的命令打开mysql的配置文件,去除68,69行的注释
    sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
2. 重启mysql服务,就会产生mysql日志文件
    sudo service mysql restart 
3. 打开MySQL的日志文件。
    mysql日志文件位置:/var/log/mysql/mysql.log
    使用下面的命令可以实时查看mysql的日志文件:
    sudo tail -f /var/log/mysql/mysql.log 

请输入图片描述

3.2 查询函数

之前学习MySQL时,MySQL查询语句提供很多高级用法:where子句、排序、聚合函数、分组、连接查询、子查询等。Django通过模型类.objects属性提供以下几个函数,实现数据的查询:

函数名 功能 返回值 说明
all 返回模型类对应数据表中的所有数据 QuerySet类型 查询集(列表形式,内部为查询出来的模型类对象)
get 返回表中满足条件的一条(只能有一条数据)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值