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='天龍八部')




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章