Django---ORM操作

一、连接数据库

在Django的settings中修改DATABASES

Django连接数据库使用的是mysqlclient,下载命令:

python install mysqlclient

DATABASES = {
        "default": {
            "ENGINE": "django.db.backends.mysql",
            "HOST": DATABASE_HOST,
            "PORT": DATABASE_PORT,
            "USER": DATABASE_USER,
            "PASSWORD": DATABASE_PASSWORD,
            "NAME": DATABASE_NAME,
        }
    }

二、编写类

2.1 编写类

修改models.py文件,编写的类Django会通过命令创建相对应的数据库表

表名格式:App名称+类名小写

from django.db import models


class UserInfo(models.Model):
    """
    用户表
    """
    name = models.CharField(verbose_name="姓名", max_length=16)
    age = models.IntegerField(verbose_name="年龄")
    email = models.CharField(verbose_name="邮箱", max_length=32)

2.2 同步数据库

makemigrations:读取已经注册所有的app中的models.py文件,根据类生成被指文件并放在app下的migrations目录下

python manage.py makemigrations

在这里插入图片描述

migrate:根据配置文件自动生成相应的SQL语句

python manage.py migrate

在这里插入图片描述

2.3 模型字段属性【待更新,不全】

字段属性含义
max_length最大长度
verbose_name字段备注
db_column重新定义字段名称
max_digits浮点型最大长度
decimal_places小数点位数
auto_now = True获取的是当前时间
null = True可为空,默认是不为空
blank= True可为空,默认是不为空
default默认值
primary_key=True主键

null与blank的区别与联系:

  • blank用于表单的认证,被设为blank=False(默认为False)的字段在填写表单时不能为空
  • null用于规定数据库中的列的非空性,被设为null=False(默认为False)的字段在数据库中对应的列不能为空

2.4 模型字段类型【待更新,不全】

字段类型含义演示
CharFieldvarcharmodels.CharField(max_length=64, db_column=‘from_code’)
IntegerFieldintmodels.IntegerField(db_column=‘total’, null=True, blank=True)
DecimalFieldfloat
DateFielddate
Datetimedatetime
BinaryFieldlongblobmodels.BinaryField(db_column=‘node_info’, null=True, blank=True)

三、CRUD操作

3.1 新增

  • 方式一
model.UserInfo.objects.create(name="张三", age=14, emial="xxx@qq.com")
  • 方式二
model.UserInfo.objects.create(**{"name": "张三", "age": 14, "emial": "xxx@qq.com"})

3.2 查询

all()查询,如果没有查询到则返回[]列表,可以使用Boolean类型进行判断
first()查询,如果没有查询到则返回None类型

3.2.1 查询全部

model.UserInfo.objects.all()

3.2.2 查询第一条数据

model.UserInfo.objects.first()

3.2.3 条件查询

model.UserInfo.objects.filter(name="张三").first()
  • filter的其他参数【待更新,不全】
参数含义
__gt大于
__gte大于等于
__lt小于
__lte小于等于
__in存在于一个list范围内
__startswith以…开头
__istartswith以…开头 忽略大小写
__endswith以…结尾
__iendswith以…结尾,忽略大小写
__range在…范围内
__year日期字段的年份
__month日期字段的月份
__day日期字段的日

3.2.4 排序查询

  • 正序
model.UserInfo.objects..order_by('age').all()
  • 倒叙
model.UserInfo.objects..order_by('-age').all()

3.2.5 动态查询

def getKwargsEqual(params, times=None):
    """
    判断参数是否为None
    """
    kwargs = {}
    keys = params.keys()
    for key in keys:
        if params.get(key) is not None:
            kwargs[key] = params.get(key)
    return kwargs
 queryset = formWork.objects.filter(**kwargs).all()

3.3 删除

先查询出数据之后,在进行删除

3.3.1 全部删除

model.UserInfo.objects.all().delete()

3.3.2 条件删除

model.UserInfo.objects.filter(name="张三").delete()

3.4 修改

先查询出数据之后,在进行修改

3.4.1 全部修改

model.UserInfo.objects.all().update(age=19)

3.4.2 条件修改

model.UserInfo.objects.filter(name="张三").update(age=19)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Monly21

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值