50.2 Django 连接MySQL,django orm 数据库(models)操作
如何获取前端数据
request方法:
获取前端数据的方式: request.POST(获取表单中发送的数据)、request.GET (获取的是url后面跟的数据)
前端:注意name属性的值即为后台大字典的key ,即通过key来取到前端发过来的数据
后端:
views : request.POST.get() 方法默认取列表中的最后一个值,request.POST.getlist() 取列表
1.数据库:Django连接数据库配置:
1. setting.py : 配置数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'day50',
'HOST': '127.0.0.1',
'PORT': 3306,
'USER': 'root',
'PASSWORD': '123'
}
}
2. __init__.py: 项目的__init__文件 或者 app的__init__文件
import pymysql
pymysql.install_as_MySQLdb()
3. 重启Django服务即可链接数据库:
2. django orm简介
django orm不会帮你创建库 只能帮你自动创建表
orm对象关系映射
类 表
对象 记录
属性 字段值
作用:能够让一个不会数据库操作的小白也能够通过Python面向对象语法 句点符来简单快捷的操作数据
3.创建数据库表
1.创建数据库表:数据库必须是先创建好的,然后通过models 创建表
如果不指定主键字段,Django会默认创建一个id为主键字段
2. *************************数据库迁移(同步)命令************************
1.python3 manage.py makemigrations # 仅仅是将你对数据库的改动记录到某个小本本上(migrations文件夹)
2.python3 manage.py migrate # 将改动真正的同步到数据库中
快捷方法: makemigrations 、 migrate
3. 字段的增删的增删改查操作 (数据完成增删改查之后,直接执行 makemigrations、migrate即可更新到数据库)
字段的增删改查 字段的增 特别注意 1.要么给该字段设置默认值 2.要么运行该字段可以为空 字段的查 ... 字段的改 修改models代码 之后执行数据库迁移命令即可 字段的删 只要注释掉对应的字段 执行数据库迁移命令就会将对应的字段及数据信息全部删除(慎用)
4.数据的增删查改
res.first () 只能查询到结果中的第一个对象,其它对象怎么取呢?
数据的增删改查 查 1.filter() from app01 import models @@@@ res = models.User.objects.filter(username='jason') # select * from user where username='jason' # 返回的结果是一个列表 支持索引取值但是不支持负数并且不推荐使用 推荐你使用它给你封装好的方法 user_obj = res.first() #等于res[0]
print(user_obj.name) # filter方法条件不存在的时候 不会报错返回的是一个空列表 """ filter括号内直接放多个关键字参数 并且多个关键字参数之间是and关系 res = models.User.objects.filter(username='jason',password='123') # select * from user where username='jason' and password='123'; """ 2.查所有的数据 1.filter() 括号内不写拿所有 <QuerySet [<User: jason>, <User: egon>, <User: sean>, <User: admin>, <User: 你不行>]> 2.all() 查询所有数据 <QuerySet [<User: jason>, <User: egon>, <User: sean>, <User: admin>, <User: 你不行>]> 增 1.create() user_obj = models.User.objects.create(name=username,password=password) print(user_obj,user_obj.name) # 该方法有返回值 返回值就是当前被创建的对象本身 2.对象的绑定方法 # 方式2 # 1 先生成一个User对象 user_obj = models.User(name=username,password=password) # 2 调用对象的绑定方法 user_obj.save() 删 用户点击谁 你的后端就应该删除 后端如何获取用户想要删除的数据id? models.User.objects.filter(id=delete_id).delete() # 将filter过滤出来的数据全部删除 批量删除 改 如何获取用户想要修改的数据id 根据数据id获取数据并且展示到前端页面供用户查看 # 方式1(推荐) 批量更新 models.User.objects.filter(id=edit_id).update(name=username,password=password) # 方式2(了解) # 1 先获取数据对象 edit_obj = models.User.objects.filter(id=edit_id).first() # 2 再修改对象属性 edit_obj.name = username edit_obj.password = password # 3 调用对象的绑定方法保存 edit_obj.save()
5.表关系创建
原生sql写法:
出版社对书籍 一对多关系 一个出版社可以出版多本书籍 外键字段建在从表 foreign_key reference 主键字段
书籍和作者 多对多关系 建立第三张关系表book2author
作者和作者详情是一对一关系 外键关系随便建,一般建在出现频次较高的一方
django models 表关系创建
注意点: 1. 多对多外键字段是虚拟字段 ,在表中不会显示,是用用来自动创建第三张关系表的
2.一对多外键字段,是实际字段,在表中显示,且django 会自动在字段上加后缀‘_id’
from django.db import models # Create your models here. class Book(models.Model): # id是自动创建的 我们就不写了 title = models.CharField(max_length=64) # price为小数字段 总共8位小数位占2位 price = models.DecimalField(max_digits=8,decimal_places=2) # 出版社与书籍 是一对多外键关系
publish = models.ForeignKey(to='Publish') # 默认关联字段就是出版社表的主键字段 还有一个参数为tofield 指定关联字段 # publish = models.ForeignKey(to=Publish) # to后面也可以直接写表的变量名 但是需要保证该变量名在当前位置的上方出现 # 书籍与作者 是多对多外键关系 authors = models.ManyToManyField(to='Author') # 书籍和作者是多对多关系 """ authors字段是一个虚拟字段 不会真正的在表中创建出来 只是用来告诉django orm 需要创建书籍和作者的第三张关系表 """ class Publish(models.Model): name = models.CharField(max_length=64) addr = models.CharField(max_length=64) class Author(models.Model): name = models.CharField(max_length=32) phone = models.BigIntegerField() # 一对一外键关系建立 建立在出现频次较高的一方 author_detail = models.OneToOneField(to='AuthorDetail') class AuthorDetail(models.Model): age = models.IntegerField() addr = models.CharField(max_length=255)