目录
练习代码 https://blog.csdn.net/zh__quan/article/details/82155617
1. 模型 - Models
1.什么是模型
模型,是根据数据库中数据表的结构来创建出来的class,
每一张表对应到编程语言就是一个class,表中的每一个列,到编程语言中就是class中的一个属性
2.创建和使用模型 - ORM
1.什么是ORM
ORM : Object Relational Mapping
简称:ORM,O/RM,O/R Mapping
中文: 对象关系映射
三大特征:
1.数据表 到 类(class) 的映射
允许将数据表(Table) 自动生成一个 类(Class)
允许将类(Class) 自动生成一个 数据表(Table)
2.数据类型的映射
允许将表中字段的数据类型 自动 映射成编程语言中对应的数据类型
允许将编程语言中的数据类型 自动 映射成表中字段对应的数据类型
3.关系映射
允许将表与表之间的关系 自动 映射成类与类之间的关系
允许将类与类之间的关系 自动 映射成表与表之间的关系
2.ORM的优点
1.提高了开发效率,能够自动完成表与类之间的映射
2.可以省略庞大的数据访问层,即便不用SQL编码,也能完成对数据库的CRUD操作
3.创建 和 配置 数据库
1.创建数据库(支持中文)
create database 数据库名 default charset utf8 collate utf8_general_ci;
2.Django中数据库的配置
在 settings.py中配置数据库的信息
DATABASES={
'default':{
'ENGINE':'...',
'NAME':'...',
}
}
连接MySQL数据库的配置:
1.ENGINE:连接到数据库的引擎(驱动程序)
django.db.backends.mysql
2.NAME:要连接的数据库名称
3.USER:用户名称,通常为 root
4.PASSWORD:密码,学习为 123456
5.HOST:要连接的主机
本机:localhost 或 127.0.0.1
6.PORT:指定端口号
MYSQL:3306
注意:
Django 中要连接MySQL数据库的话依赖于 MySQLdb
通过 pymysql 解决问题
sudo pip3 install pymsql==0.7.11
在项目的主目录中__init__.py:
import pymsql
pymysql.install_as_MySQLdb()
4.数据库的同步操作
1. ./manage.py makemigrations
作用:将每个应用下的models.py文件生成一个数据库的中间文件
并将中间文件保存在migrations的目录中
2. ./manage.py migrate
作用:将每个应用下的migrations目录中的中间文件同步到数据库中
3.编写Models(重难点)
1.注意
1.Models中的每个class都称为模型类(Model) 或 实体类(Entry)
实体:表示的就是数据库中表中的一条记录
实体完整性:约束表中的记录不完全重复
2.Models中的每个类都必须继承自models.Model
2.举个例子
在 index 应用中的 models.py 中
from django.db import models
# 创建 Publisher 实体类
# 表示 出版社 的信息,属性如下:
# 1.name : 出版社的名称(varchar,string)
# 2.address : 出版社的地址(字符串,长度50)
# 3.city : 出版社所在城市(字符串,长度20)
# 4.country : 出版社所在国家(字符串,长度20)
# 5.website : 出版社的网址
class Publisher(models.Model):
name = models.CharField(max_length=30)
address = models.CharField(max_length=50)
city = models.CharField(max_length=20)
country=models.CharField(max_length=20)
website=models.URLField()
3.Django中的Models的语法
语法:
class ClassName(models.Model):
属性 = models.字段类型(字段选项)
字段类型:映射到数据库表中的数据类型
CharField - varchar
字段选项:对生成的字段的说明信息
max_length = 30
字段类型(Field Types)
1.BooleanField() 布尔值类型
2.CharField() 字符串类型
3.DateField() 年月日
4.DateTimeField() 年月日时分秒
5.DecimalField() 小数
money=models.DecimalFields(max_digits=7,decimal_places=2)
6.EmailField()
#存电子邮件地址 - varchar
7.FloatField() 浮点数类型
8.ImageField()
#存图片路径 - varchar
uimg=models.ImageField(upload_to='images/users/')
9.IntegerField() 整数类型
10.URLField()
# 存网址 - varchar
11.TextField()
# 存大量数据 - text
字段选项(Field Options)
1.default
为当前属性(字段)指定默认值
2.null
指定当前属性(字段)的值是否允许为空,默认为False,表示不能为空
3.db_column
指定当前属性(字段)对应到数据库的列名,如果不指定则采用属性名作为列名
练习:
1.在models.py中追加2个class
1.Author - 作者
1.name - 姓名
2.age - 年龄
3.email - 邮箱(允许为空)
2.Book - 图书
1.title - 书名
2.publicate_date - 出版时间
2.生成日志文件,再同步回数据库
class Author(models.Model):
name = models.CharField(max_length=20)
age = models.IntegerField()
email = models.EmailField(null=True)
class Book(models.Model):
title = models.CharField(max_length=50)
publicate_date = models.DateField()
./manage.py makemigrations
./manage.py migrate
4.相关指令
1.数据的版本切换
1. ./manage.py migrate
执行所有应用中最新版本的数据库中间文件
2. ./manage.py migrate 应用名称 版本号
./manage.py migrate index 0003
2.通过数据库自动导出models
./manage.py inspectdb > 文件名.py
5.模型中的 CRUD
1.通过 ORM 向 数据库中 增加数据
1.Entry.objects.create(属性=值,属性=值)
返回值:创建好的实体
2.创建一个Models对象,并通过save()完成增加
obj = Entry(属性=值,属性=值)
obj.save()
3.使用字典构建对象,并调用其save()完成增加
dic = {
'属性1':'值1',
'属性2':'值2',
}
obj = Entry(**dic)
obj.save()
练习:
使用三种方式,分别向
index_book,index_publisher 中各增加三条数据
2.查询数据(重难点)
通过 Entry.objects 调用查询接口
1.基本查询操作
语法:all()
用法:Entry.objects.all()
返回:QuerySet(查询结果集,是一个封装了若干对象的列表)
2.查询指定列的操作
语法:values('列1','列2',...)
用法:Entry.objects.values('列1','列2')
返回:QuerySet
注意:values()可以用在所有查询返回QuerySet的方法的后面
如: Author.objects.all().values('name','age')
3.查询指定列的操作
语法:values_list()
用法:Entry.objects.values_list()
返回:QuerySet,是一个由若干元组所组成的列表
4.对查询数据进行排序
语法:order_by()
用法:Entry.objects.order_by('列1','-列2')
默认是升序排序,列名前加"-",则表示该列按降序排序
5.对条件取反
语法:exclude()
用法:Entry.objects.exclude(条件)
1.
Author.objects.exclude(id=3)
select * from index_author where not (id=3)
2.
Author.objects.exclude(id=3,age=85)
select * from index_author where not (id=3 and age=85)
作业:
从 AUthor 中取出所有的数据,并显示在 模板中(table)
姓名 年龄 邮箱 操作
老舍 85 laoshe@163.com 删除 修改
老舍 85 laoshe@163.com 删除 修改
巴金 75 bajin@163.com 删除 修改
冰心 95 bingxin@163.com 删除 修改