zoukankan      html  css  js  c++  java
  • django-model操作数据库(增删该查)

    一、数据库操作

    1、创建model表

    ​ 

    基本结构

    更多字段:

    1. + View Code

    更多参数

    1. + View Code

    2. 2、注册APP,settings添加app

    3、生成相应的表

    ​ python manage.py makemigrations

    ​ python manage.py migrate 

    4、admin后台注册表

    python manage.py createsuperuser 创建用户

    后台可以管理,添加数据

    对数据进行增删改查

    models.UserInfo.objects.all()

    models.UserInfo.objects.all().values('user') #只取user列

    models.UserInfo.objects.all().values_list('id','user') #取出id和user列,并生成一个列表

    models.UserInfo.objects.get(id=1)

    models.UserInfo.objects.get(user='yangmv')

    成功获取数据

    models.UserInfo.objects.create(user='yangmv',pwd='123456')

    或者

    obj = models.UserInfo(user='yangmv',pwd='123456')

    obj.save()

    或者

    dic = {'user':'yangmv','pwd':'123456'}

    models.UserInfo.objects.create(**dic)

    models.UserInfo.objects.filter(user='yangmv').delete()

    models.UserInfo.objects.filter(user='yangmv').update(pwd='520')

    或者

    obj = models.UserInfo.objects.get(user='yangmv')

    obj.pwd = '520'

    obj.save()

    1. 常用方法

      + View Code

    二、常用字段

    models.DateTimeField  日期类型 datetime

    参数,

    auto_now = True :则每次更新都会更新这个时间

    auto_now_add 则只是第一次创建添加,之后的更新不再改变。

      

    表结构的修改

    表结构修改后,原来表中已存在的数据,就会出现结构混乱,makemigrations更新表的时候就会出错

    解决方法:

    1、新增加的字段,设置允许为空。生成表的时候,之前数据新增加的字段就会为空。(null=True允许数据库中为空,blank=True允许admin后台中为空)

    2、新增加的字段,设置一个默认值。生成表的时候,之前的数据新增加字段就会应用这个默认值

    执行makemigrations, migrate 后。老数据会自动应用新增加的规则

    models.ImageField 图片

    models.GenericIPAddressField IP

    ip = models.GenericIPAddressField(protocol="ipv4",null=True,blank=True)
    img = models.ImageField(null=True,blank=True,upload_to="upload")

    数据库中保存的只是图片的路径

    常用参数

    选择下拉框 choices


    class UserInfo(models.Model):
      USER_TYPE_LIST = (
          (1,'user'),
    (2,'admin'),
    )
      user_type = models.IntegerField(choices=USER_TYPE_LIST,default=1)

    2、连表结构

    • 一对多:models.ForeignKey(其他表)

    • 多对多:models.ManyToManyField(其他表)

    • 一对一:models.OneToOneField(其他表)

    应用场景:

    • 一对多:当一张表中创建一行数据时,有一个单选的下拉框(可以被重复选择)例如:创建用户信息时候,需要选择一个用户类型【普通用户】【金牌用户】【铂金用户】等。

    • 多对多:在某表中创建一行数据是,有一个可以多选的下拉框例如:创建用户信息,需要为用户指定多个爱好

    • 一对一:在某表中创建一行数据时,有一个单选的下拉框(下拉框中的内容被用过一次就消失了例如:原有含10列数据的一张表保存相关信息,经过一段时间之后,10列无法满足需求,需要为原来的表再添加5列数据

    一对多:

      

    这是Game表,里面有3个业务

    这是主机表,可以通过外键,对应到Game表的业务的ID

    ![img](https://images2015.cnblogs.com/blog/884635/201603/884635-20160327235723323-817764474.png

    多对多:

     

    Django model会自动创建第3张关系表,用于对应user id 和usergroup id

    这是UserGroup表

    这是User表

    这是Django自动生成的对应关系表

    user_id = 1 为 yangmv,同时属于1,2(技术部,运营部)

    一对一: (一对多增加了不能重复)

      

    连接Mysql

    1. + View Code

        

    一对多操作实例

    首先生成2个表

      

    input和select标签用forms生成

    先执行create_group生成3个group

    已经查询出Group数据

    添加

    方法1,方法2

      

    方法3

      

    查询。展示出所有的数据

      

      

    GET方式查询

      

    一对多跨表操作,总结

    1、group2对应的是一个对象

    2、创建数据 group2_id ,直接查询数据库

    3、获取数据,通过. group2.caption

    4、查询数据,通过__ group2__caption

    ============

    转载自:https://www.cnblogs.com/zuichuyouren/p/11094673.html

  • 相关阅读:
    微服务-分布式事务解决方案
    Python cannot import name 'Line' from 'pyecharts'
    powershell 基础
    Linux SSH config
    神奇的Python代码
    GitHub 中 readme 如何添加图片
    Linux 笔记(自用)
    Anaconda 安装 TensorFlow ImportError:DLL加载失败,错误代码为-1073741795
    Ubuntu 分辨率更改 xrandr Failed to get size of gamma for output default
    Git入门教程 Git教程入门
  • 原文地址:https://www.cnblogs.com/hd92/p/13579668.html
Copyright © 2011-2022 走看看