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)

 

 

 

 

 

 

 

 

 

 

  

posted @ 2020-01-05 21:47  躺云飘  阅读(370)  评论(0编辑  收藏  举报