Django模型类1

402 阅读3分钟

ORM

在这里插入图片描述

类映射为表
类属性映射为表字段
类的对象实例映射为一行记录

==优点==

  1. 避免写SQL语句,使用面向对象的方式来操作数据库,使用比较方便。
  2. 实现项目与数据库解耦,切换数据库只需简单配置。

==缺点==

  1. 针对复杂的业务,操作比较繁琐
  2. 性能没有SQL效率高

Django配置数据库

在配置文件settings.py中

DATABASES = {
	"default":{
		"ENGINE":"django.db.backends.mysql",
		"HOST":"localhost",
		"PORT":"3306",
		"USER":"lauf",
		"PASSWORD":"lauf123",
		"NAME":"my_db",
		"CHARSET":"utf8",
	
	}

}

==注意==
django连接mysql使用python的mysqlclient库,需要安装:sudo pip3 install mysqlclient 若报错mysql_config,则需在linux系统环境中安装如下依赖:

sudo apt-get install libmysqlclient-dev
sudo apt-get install default-libmysqlclient-dev
sudo apt-get install python3-dev

#查看是否安装成功
sudo apt list --installed | grep -E "libmysqlclient-dev|python3-dev"

查看pip3是否安装成功(mysqlclient)

pip3 freeze | grep -i "mysqlclient" 

创建模型类

这里在user应用中,展示如何创建模型类

#在项目目录下,创建user应用
python3 manage.py startapp user
#安装应用 settings.py
INSTALLED_APPS = [
	...,
	"user",
]
#为应用定义模型类 user>models.py
from django.db import models
class User(models.Model):
	username = models.CharField("姓名",max_length=50,primary_key=True)#必须给max_length
	password = models.CharField("密码",max_length=50,null=False)
	score = models.DecimalField("分数",max_digits=4,decimal_places=2) #小数点位置
	is_delete = models.BooleanField("是否删除",default=False)
	created_time = models.DateTimeField("注册时间",auto_now_add=True)
	updated_time = models.DateTimeField("更新时间",auto_now=True)
	def __str__(self):
		"""打印对象时,显示的信息"""
		return self.username
	class Meta:
		db_table = "user_table" #更改表名字

#迁移模型类,到数据库中
python3 manage.py makemigrations
python3 manage.py migrate

在没有指定主键时,Django自动创建一个id作为主键。

  ==练习为user表添加一个hobby字段==

#在模型类中,增加类属性
hobby = models.CharField("爱好",max_length=50,default="") #防止之前的数据没有这个字段而报错,必须给一个default

#迁移到数据库 

模型类的字段类型

  1. BooleanField() 对应数据库中的tinyint,0/1; Django中为True/False

  2. CharField() 对应数据库中的varchar,必须指定max_length

  3. DateField() 对应数据库中的date, 参数,auto_now = True, 更新时间 auto_now_add = True,第一次插入时间 default 给一个默认值

  4. DateTimeField() 使用同DateField()

  5. FloatField() 对应数据库中的double

  6. DecimalField() 精确的小数,对应数据库decimal 必需参数:max_digits=5总位数,decimal_places=2 小数点位置

  7. EmailField() 对应数据库varchar

  8. IntegerField() -->int

  9. ImageField() --->varchar(100) 存储路径

  10. TextField --->longtext 长文本

类属性的约束

primary_key, bool, 类属性是否为主键

blank,bool,是否为空,admin后台管理的时候可以不写内容的字段

null,bool,该列是否可为null空值

default,默认值

db_index,bool,是否在该列设置索引

unique,bool, 该列的值是否唯一,唯一索引

db_column列的名称,默认使用类属性作为列名

verbose_name, 后台显示的字段名字

练习

创建一个Book模型类,类属性如下:
title, 书名,字符类型,最大长度50,且值唯一
price, 价格,精确小数,最大5位数,一位小数
publish,出版社,字符类型,最大长度50,不能为 null
打印对象时,输出书名,且修改表名为book_table\

注意:每次修改模型类,都要迁移;迁移失败,则删除migrations目录下的迁移文件,除了__init.__py,删除库,重建库,重新迁移

上一篇:Django的应用
下一篇:Django的模型类2