Django数据库的基本操作

定义图书模型类BookInfo

class BookInfo(models.Model):
    btitle = models.CharField(max_length=20, verbose_name='名称')
    bpub_date = models.DateField(verbose_name='发布日期')
    bread = models.IntegerField(default=0, verbose_name='阅读量')
    bcomment = models.IntegerField(default=0, verbose_name='评论量')
    is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')


    class Meta:
        db_table = 'tb_books'  # h指明数据库表名
        verbose_name = '图书'  # 在admin站点中显示的名称
        verbose_name_plural = verbose_name  # 显示的复数名称


定义英雄模型类HeroInfo
class HeroInfo(models.Model):
    GENDER_CHOICES = (
        (0, 'male'),
        (1, 'female')
    )
    hname = models.CharField(max_length=20, verbose_name='名称')
    hgender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='性别')
    hcomment = models.CharField(max_length=200, null=True, verbose_name='描述信息')
    hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='图书')  # 外键
    is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')


    class Meta:
        db_table = 'tb_heros'
        verbose_name = '英雄'
        verbose_name_plural = verbose_name


# 基本条件查询
# 1.查询id为1的书籍
BookInfo.objects.filter(id=1)

# 2.查询书名包含‘湖’的书籍 (like %湖%)
BookInfo.objects.filter(btitle__contains='湖')

# 3.查询书名以‘部’结尾的书籍 (endswith 、startswith)(like %部)

BookInfo.objects.filter(btitle__endswith='部')

# 4.查询书名不为空的书籍 (双重否定代表肯定)
BookInfo.objects.filter(btitle__isnull=False)

# 5.查询编号为2或4的书籍 (选项,要么2要么4) (不是区间)
BookInfo.objects.filter(id__in=[2,4])

# 6.查询编号大于2的书籍 (大于:gt)(小于:lt)(大于等于:gte)(小于等于:lte)
BookInfo.objects.filter(id__gt=2)

# 7.查询id不等于3的书籍 (exclude查询满足条件以外的数据) (filter查询满足条件的数据)

BookInfo.objects.exclude(id=3)

# 8.查询1980年发表的书籍
BookInfo.objects.filter(bpub_date__year='1980')

# 9.查询1990年1月1日后发表的书籍
BookInfo.objects.filter(bpub_date__gt=date(1990,1,1))

# 10.按照阅读量进行排序查询
正序(从小到大):
BookInfo.objects.all().order_by('bread')
倒序:
BookInfo.objects.all().order_by('-bread')
 
########################################################
# F对象
# 1.查询阅读量大于评论量的书籍
BookInfo.objects.filter(bread__gt=F('bcomment'))
# 2.查询阅读量大于2倍评论量的书籍
BookInfo.objects.filter(bread__gt=F('bcomment')*2)
 
########################################################
# Q对象
# 1.查询阅读量大于20,或编号小于3的图书
BookInfo.objects.filter(Q(bread__gt=20) | Q(id__lt=3))
# 2.查询编号不等于3的书籍
BookInfo.objects.filter(~Q(id=3))

########################################################
# 聚合函数
# 1.统计总的阅读量
BookInfo.objects.aggregate(Sum('bread'))

########################################################
# 基础关联查询
# 1.一查多:查询编号为1的图书中所有人物信息
book = BookInfo.objects.get(id=1)
book.heroinfo_set.all()

# 2.多查一:查询编号为1的英雄出自的书籍
hero = HeroInfo.objects.get(id=1)
hero.hbook


########################################################
# 关联过滤查询
# 1.多查一:查询书籍中人物的描述包含"降龙"的书籍
BookInfo.objects.filter(heroinfo__hcomment__contains='降龙')
# 2.一查多:查询书名为"天龙八部"的所有人物信息
HeroInfo.objects.filter(hbook__btitle='天龙八部')




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值