Django数据库增删改查

添加
# 表.objects.create

# 方法一
a = User.objects.create(userNum=123, name='ABB', age=18, sex='男')

# 方法二
d = dict(userNum=123, name='ABB', age=18, sex='男')
a = User.objects.create(**d)

#方法三
a = User(userNum=123, name='ABB', age=18, sex='男')
a.save()

参数解释
get_or_create只要有一个字段值与数据表中不相同(除主键),就会执行插入操作
如果完全相同则不进行插入操作,而是返回这行数据的数据对象
update_or_create判断当前数据在数据表中是否存在,若存在则进行更新,否则为新增表数据
bulk_create对数据进行批量操作
v1 = User(userNum=123, name=‘ABB’, age=18, sex=‘男’)
v2 = User(userNum=124, name=‘ABC’, age=19, sex=‘女’)
info_list = [v1,v2]
User.objects.bulk_create(info_list)
删除
# 表.objects.filter().delete()

# 方法一 删除全部内容
User.objects.all().delete()

#方法二 删除一条name为ABC的数据
User.objects.filter(name='ABC').delete()

#方法三 删除多条数据
User.objects.filter(age=18).delete()

删除过程中数据设有外键字段,就会同时删除外键关联的数据,删除模式参考models.py中设置的PROTECT、SET_NULL等

修改
# 表.objects.filter().update()

# 方法一 修改name为ABC的性别为gay
User.objects.filter(name='ABC').update(sex='gay')

# 方法二 
a = dict(age='1')
User.objects.filter(name='ABC').update(**a)

# 方法三 使用F方法实现自增/自减
from djanto.db.models import F
User.objects.filter(name='ABC').update(age=F('age')+1)

查询
# select * from user 全表查询
a = User.objects.all()
# 查第一条
a[0].name

# select * from user LIMIT3 查前3条
a = User.objects.all()[:3]

# filter 也可添加多个条件
User.objects.filter(name='ABC',age=18)

# SQL中or方法 select * from user where name='ABC' or age=18 ,需要引入 Q
from django.db.models import Q
User.objects.filter(Q(name='ABC') | Q(age=18))

# SQL中not方法 select * from user where not name='ABC' ,在Q前加~
User.objects.filter(~Q(name='ABC'))

# 统计数量
User.objects.filter(name='ABC').count()

# 去重 select DISTINCT name from user where name='ABC' ,distinct无需设置参数,去重方式根据values
a = User.objects.values('name').filter(name='ABC').distinct()

# 降序排序查询,降序在order_by里设置 '-'
User.objects.order_by('-age')

匹配符使用说明
__exactfilter(name__exact=‘ABC’)完全等于
__iexactfilter(name__iexact =‘ABC’)完全等于并忽略大小写
__containsfilter(name__contains =‘ABC’)模糊匹配,类似SQL中like %ABC%
__icontainsfilter(name__icontains =‘ABC’)模糊匹配并忽略大小写
__gtfilter(name__gt =1)大于
__gtefilter(name__gte =1)大于等于
__ltfilter(name__lt=1)小于
__ltefilter(name__lte=1)小于等于
__isnullfilter(name__isnull=True/False)判断是否为空
关联表外键参数on_delete
(1)、on_delete = None:
删除关联表的数据时,当前表与关联表的filed的行为。
(2)、on_delete = models.CASCADE:
表示级联删除,当关联表(子表)中的数据删除时,与其相对应的外键(父表)中的数据也删除。
(3)、on_delete = models.DO_NOTHING:
你删你的,父亲(外键)不想管你
(4)、on_delete = models.PROTECT:
保护模式,如采用这个方法,在删除关联数据时会抛出ProtectError错误
(5)、on_delete = models.SET_DEFAULT:
设置默认值,删除子表字段时,外键字段设置为默认值,所以定义外键的时候注意加上一个默认值。
(6)、on_delete = models.SET(值):
删除关联数据时,自定义一个值,该值只能是对应指定的实体
数据库字段
  • 字符串

    password=models.CharField(verbose_name='密码:',max_length=50)
    
  • 设置主键

    account=models.CharField(verbose_name='账号:',max_length=50,primary_key=True,db_index=True)
    db_index:添加索引
    
  • 设置关联外键

    account=models.ForeignKey(User_Account,on_delete = models.CASCADE)
    
  • 整型

    group_id=models.IntegerField(verbose_name='群聊编号')
    
  • 布尔类型

    models.BooleanField(verbose_name='是否可以增加文件',default=False)
    
  • 单选

    #sex choices 设置单选,元组前面的值为真是存储值,后面的值为展示值sex=models.CharField(max_length=1,choices=[('男','男'),('女','女')])
    
  • 时间

    DateTimeField(DateField)x
    日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]
    
    models.DateField(verbose_name='token更新时间',auto_now=True)
    日期格式 YYYY-MM-DD
    auto_now:每次修改都会自动更新
    auto_now_add:数据创建时值为添加时的时间,后续其他字段数据修改不会变
    
    TimeField(DateTimeCheckMixin, Field)
    时间格式 HH:MM[:ss[.uuuuuu]]
    
清空数据库,重新建表
  • 想要删除自己之前练习的数据库模型

    Order.objects.all().values().delete()
    
  • 删除文件

    • 删除数据库内所有的表
    • 删除migrations文件夹中的所有 文件,除了__init__.py 文件
    • 运行
    python manage.py makemigrations
    python manage.py migrate
    
django 解决manage.py migrate无效的问题
  • 解决方案

    python manage.py dbshell 进到数据库中,执行delete from django_migrations where app='your_appname';
    
    python manage.py makemigrations(若migrations文件未删除,可不执行这一步)
    
    python manage.py migrate 好啦,大功告成
    
  • 原因

    造成多次应用migrations失败的原因是,当前model是修改过的,原来的migrations已经被我删除,但是,重新生成的migrations使用递增整数记名,所以,在django_migrations表中0001,0002等前面几个数字的文件都已被记录,在Django看来,被记录了就相当于已应用,所以,会出现刚开始的No migrations to apply.
    
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值