zoukankan      html  css  js  c++  java
  • 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)

      

  • 相关阅读:
    服务器响应状态码
    30
    29
    Java中参数始终是按值传递
    浅析 Java 中的继承和重写
    25
    super 关键字
    24
    Overriding
    23
  • 原文地址:https://www.cnblogs.com/bigbox/p/12153792.html
Copyright © 2011-2022 走看看