Django中表与字段的定义和约束语句

本文详细介绍了Django中如何定义和管理数据库表及字段,包括创建迁移文件、执行数据库迁移、模型类的增删改操作。同时,文章探讨了多种查询方法,如基本查询语法、比较查询、模糊查询、范围查询以及使用F对象和Q对象进行复杂查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Django中表与字段的定义

  1. 在app文件夹下models.py中建立表与字段
#这里定义表和字段后将以user_user的形式(app名+类名)
class User(models.Model):
    #AutoField相当于int类型auto_increment自增约束
    id = models.AutoField(primary_key=True)
    #CharField相当于varchar类型
    username = models.CharField(max_length=16)
    password = models.CharField(max_length=16)
    #PositiveSmallIntegerField相当于tinyint
    gender = models.PositiveSmallIntegerField()
    #IntegerField相当于int类型
    age = models.IntegerField()
    #DateTimeField相当于datetime
    createDatetime = models.DateTimeField()
Django支持的常用字段类型
字段类型关键字说明
AutoField自动增长的整数(相当于:int auto_increment)说明:常用的参数:primary_key=True(定于主键) 如果不写id = models.AutoField(primary_key=True) ,Django 也会创建一个自增的主键id
IntegerField整数int
FloatField浮点数 ,必填参数:max_digits:最大总位数,decimal_places:小数位数
Decimal定点数,必填参数:max_digits:最大总位数,decimal_places:小数位数
CharField字符串varchar(),必填参数:max_length:最大长度
TextField大文本Text
BooleanFieldTrue/False
DateTimeField日期Datetime:YYYY-MM-DD HH:MM:SS(常用参数):auto_now:每次修改对象,自动设置时间,auto_now_add:第一次被创建,自动设置时间
EmailField邮箱
ImageField图片
关键字说明默认值
primary_key是否是主键False
null能否为空False
unique能否重复False
default默认值False
blank在Django管理后天新增或编辑一条表数据时,该字段能否为空,null是数据库范畴,blank是表单验证范畴False
定义完整模型类
from django.db import models
import datetime
# Create your models here.


#这里定义表和字段后将以user_user的形式(app名+类名)
class User(models.Model):
    #CharField相当于varchar类型
    username = models.CharField(max_length=16,unique=True)
    password = models.CharField(max_length=16)
    #PositiveSmallIntegerField相当于tinyint
    gender = models.PositiveSmallIntegerField(default=0)
    #IntegerField相当于int类型
    age = models.IntegerField(null=True)
    #DateTimeField相当于datetime
    createDatetime = models.DateTimeField(auto_now_add=datetime.datetime.now())
数据库的迁移与维护

生成迁移文件:
python manage.py makemigrations

执行迁移文件
python manage.py migrate

模型类的增删改
  1. 模型类
class User(models.Model):
    #CharField相当于varchar类型
    username = models.CharField(max_length=16,unique=True)
    password = models.CharField(max_length=16,default='123456')
    #PositiveSmallIntegerField相当于tinyint
    gender = models.PositiveSmallIntegerField(default=0)
    new = models.CharField(max_length=10,null=True)
    #IntegerField相当于int类型
    age = models.IntegerField(null=True)
    #DateTimeField相当于datetime
    createDatetime = models.DateTimeField(auto_now_add=datetime.datetime.now())
  1. 交互式编程

    交互式:
    python manage.py shell

    导入user中的模型类
    > from user。models import*
    退出:
    exit

  2. 增加数据

save方法

user = User()
user.username = ‘name1’
user.id

user.save()
user.id
1

  1. 修改数据

修改user用户的密码为pass1

user.password = ‘pass1’
user.save()

注释:如果模型类中id没有值,为新增数据
如果模型类中id有值,为修改数据

  1. 删除数据

删除user对应数据库中的数据

user.delete()

原理是根据id来删除

  1. 其他的增删改

增加:
user=User.objects.create(
username = ‘name2’
)
相当于:
user = User(username = ‘name2’)
user.save()

修改:
User.objects.filter(条件).update(属性=属性值)
例如:
User.objects.filter(id=2).update(password=‘pass2’)

删除:
User.objects.filter(id=2).delete()

模型类的查询方法
  1. 查询语法格式
  2. 比较查询
  3. 模糊查询
  4. 范围查询
  5. F对象和Q对象
1. 查询语法格式

格式:
模型类名字.objects.方法(条件)
例如:
user = User.objects.get(id=1)

方法说明
all()返回所有
get(条件)返回满足条件的数据
filter(条件)返回满足条件的数据
exclude(条件)返回不满足条件的数据

注:
get方法必须返回一个对象
如果没有满足条件的对象,或者有多个满足条件的对象,都会报异常

all、filter、exclude返回的结果类型是QuerySet(类似列表)

例如:
user= User.objects.all()
user=User.objects.filter(id=1)
user=User.objects.exclude(id=1)

2.比较查询
条件说明
相等exact
大于gt
大于等于gte
小于lt
小于等于lte
为空查询isnull

条件格式:
字段名__条件关键字 = 比较值

例如:
查询id >=2的所有用户
users = User.objects.filter(id__gte=2)

3. 模糊查询
条件说明
包含contains
开头startswith
结尾endswith

例如:

    from user.models import *
    # 查询用户命中包含'1'的用户
    user1_s = User.objects.filter(username__contains='1')
    print(user1_s)
    # 查询用户名以'name1'开头的用户
    user2_s = User.objects.filter(username__startswith='name1')
    print(user2_s)
    # 查询邮箱以'@qq.com'结尾的用户
    user3_s = User.objects.filter(email__endswith='@qq.com')
    print(user3_s)
4.范围查询
条件说明
范围in

例如:
查询username属于[‘name1’,‘name2’]的user对象
users = User.objects.filter(username_in = [‘name1’,‘name2’])

5. F对象和Q对象
if __name__ == '__main__':
    main()
    from user.models import *
    from django.db.models import F
    # 查询在第一次创建后,发生修改的对象
    user_s = User.objects.filter(updateDatetime__gt = F('createDatetime'))
    for user1 in user_s:
        print(user1)

if __name__ == '__main__':
    main()
    from user.models import *
    from django.db.models import Q
    #查询余额大于5000块的男性
    print(User.objects.filter(money__gt=5000,gender=0))  #第一种  逗号表示与
    print(User.objects.filter(Q(money__gt=5000)& Q(gender=0)))  #第二种 Q(条件)&Q(条件)
    #查询余额大于5000块的男性和余额大于2000块的女性
    print(User.objects.filter(Q(money__gt = 5000)&Q(gender=0)|Q(money__gt = 2000)&  Q(gender=1)))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值