六.模型基础
1.Django的ORM简介
1.1什么是ORM
简介:ORM一般指对象关系映射。对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换
1.2Django中ORM 与数据库的关系
1.使用ORM的优势 -----不用直接编写SQL代码,只需像操作对象一样从数据库操作数据
2.ORM 与SQL之间的关系
3.Django中通过ORM实现model与SQL的对应关系
- 模型类对应sql的数据表
- 属性类对应表里的字段名
注:
1. 模型类必须都写在app下的models.py文件中。
2. 模型如果需要映射到数据库,所在的app必须被安装.
3. 一个数据表对应一个模型类,表中的字段,对应模型中的类属性
1.3 在Django中配置mysql数据库的整体流程
1数据库配置
2连接器配置
3django模型的编写
4模型的映射
5对数据进行增删改查
2.数据库的配置
2.1.在settings.py中配置DATABASES
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'look', #数据库名称
'USER': 'root', # 链接数据库的用户名
'PASSWORD': 'qwe123', # 链接数据库的密码
'HOST': '127.0.0.1', # mysql服务器的域名和ip地址
'PORT': '3306', # mysql的一个端口号,默认是3306
}
}
1.先建立数据库,被2.1步骤连接(见代码)
- mysql -uroot -pqwe123 进入mysql
- show databases; 查看所有的数据库
- create database look charset=utf8; 建立新的数据库
- use look; 使用数据库
- ctrl + z 退出数据库
2.2在虚拟环境中安装pymysql
命令 pip install pymysql
1.先进入虚拟环境,在项目中安装pymysql
- workon 查看虚拟环境
- workon name 运行虚拟环境
- pip list 查看所有的库
- pip install pymysql 安装库
2.3在Django项目中连接pymysql
设置连接器为pymysql:
在主目录下的的__init__.py文件添加下面两句
-
import pymysql
-
pymysql.install_as_MySQLdb()
报红多下载几次,这是远程的问题,没同步
2.4 模型类与数据库关联
1) 数据库表名
模型类如果未指明表名,Django默认以小写app应用名_小写模型类名为数据库表名。
可通过db_table指明数据库表名。
2) 关于主键
django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。
默认创建的主键列属性为id,可以使用pk代替,pk全拼为primary key。
3) 属性命名限制
不能是python的保留关键字。
不允许使用连续的下划线,这是由django的查询方式决定的。
定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法如下:
属性=models.字段类型(选项)
3.模型的创建与映射
3.1.创建模型类
1.在app下面的models.py中创建django的模型类.
from django.db import models
# Create your models here.
'''
继承自模型类models
模型类和数据库表的关系
属性和表的字段的对应关系
'''
class User(models.Model):
#建立模型类
name = models.CharField(max_length=20)
age = models.IntegerField()
gender = models.BooleanField() #性别除了男就是女用bool
class Meta:
db_table = 'User' #给定表名
def __str__(self):
#返回数据库的属性
return self.name
3.2将模型映射到数据库
1.首先执行以下命令,要创建映射文件
python manage.py makemigrations
命令后面可以跟app名称,表示指定对某个app的模型进行映射,没写所有的app都执行.
2.执行以下命令,将映射文件中的映射数据提交到数据库中
python manage.py migrate
3.进入mysql 查看映射的数据库表
- mysql -uroot -pqwe123 进入mysql
- show databases; 查看所有的数据库
- use look; 使用数据库
- show tables 查看数据库
打开数据我们能看到创建的以app名_模型名的数据表,而其他的一些表格是django自动生成的.
注意:如果要删除表,那么可以去django模型中注释掉模型类,然后执行映射的命令,不要手动在命令行里面去删除.
在执行前,保证我们创建模型的APP是已经注册过的APP
注意:在运行之前一定要将PyCharm的程序上传到虚拟机,不然会报一下错误
pymysql.err.OperationalError: (1046, 'No database selected')
django.db.utils.OperationalError: (1046, 'No database selected')
执行过程:
- workon 查看虚拟环境
- workon name 运行虚拟环境
- ls 查看目录下的文件
- cd 项目文件 进入文件
- python manage.py makemigrations 创建映射文件
- python manage.py migrate 映射文件中的映射数据提交到数据库中
- show tables 查看建立的表
从Django的模型映射到Mysql的表格
4.数据的增删改查(非详细)
4.1使用ORM进行查询数据库
1.在子应用的views中导入models.py文件,写显示函数
from django.shortcuts import render
from django.http import HttpResponse
from .models import User #导入建立的User模型
# Create your views here.
def Mysql_index_01(request):
# all 查询一个user的实例对象
# get 查询某个属性
user = User.objects.all()
return render(request,'MySQL.html',context={
'user':user
})
2.设置子路由的url
from django.urls import path,re_path
from .import views
urlpatterns = [
#查
path('Mysql_index_01',views.Mysql_index_01,name = 'Mysql_index_01'),
#增
path('add_user',views.add_user,name = 'add_user'),
]
3.建立MySQL.html模板
<a href="">{{user}}</a>
运行结果:
4.2添加数据
1.在子应用的views中导入models.py文件,写显示函数
from django.shortcuts import render
from django.http import HttpResponse
from .models import User #导入建立的User模型
# Create your views here.
def add_user(request):
#在我们的模型中跟gender不是男就是女,用True或者False
user = User(name = '小明',age = '18',gender = True)
user.save()
return HttpResponse('添加成功')
2.设置子路由的url
from django.urls import path,re_path
from .import views
urlpatterns = [
#增
path('add_user',views.add_user,name = 'add_user'),
]
3.运行结果:
4.在虚拟机中的MySql数据表
5.在不变添加数据的情况:运行两次,再次添加两个小明
把添加数据改变后,添加了大明的数据
4.3查询数据
1.在子应用的views中导入models.py文件,写显示函数
from django.shortcuts import render
from django.http import HttpResponse
from .models import User #导入建立的User模型
# Create your views here.
def seach_look(request):
#查询全部的结果
# seach = User.objects.all()
# get 返回的对象具有唯一的性质,如果符合条件的对象有多个,则get报错
seach = User.objects.get(name = '大明')
print(seach)
return HttpResponse("查询成功%s"%seach)
2.设置子路由的url
from django.urls import path,re_path
from .import views
urlpatterns = [
#查
path('seach_look',views.seach_look,name = 'seach_look%s'),
]
3.运行结果
4.4删除数据
1.在子应用的views中导入models.py文件,写显示函数
from django.shortcuts import render
from django.http import HttpResponse
from .models import User #导入建立的User模型
# Create your views here.
def delete_user(request):
#删除
#删除id为2的数据
User.objects.get(id = 2).delete()
return HttpResponse("删除成功")
2.设置子路由的url
from django.urls import path,re_path
from .import views
urlpatterns = [
#删除
path('delete_user',views.delete_user,name = 'delete_user'),
]
3.运行结果
4.在虚拟机中的MySql数据表
注:由于是自定义增长,所以删除以后ID不会改变
4.5 更改数据
1.在子应用的views中导入models.py文件,写显示
from django.shortcuts import render
from django.http import HttpResponse
from .models import User #导入建立的User模型
# Create your views here.
def update_user(request):
#更改
#方法一
user = User.objects.get(id = 3)
user.name = '莉莉'
user.save()
#方法二
User.objects.filter(name ='大明').update(name = 'LIN')
#把所有年龄改为21
User.objects.update(age = 21)
return HttpResponse("修改成功")
2.设置子路由的url
from django.urls import path,re_path
from .import views
urlpatterns = [
#修改
path('update_user',views.update_user,name = 'update_user'),
]
3.运行结果
4.在虚拟机中的MySql数据表前后对比
![]() | ![]() |