ORM查询练习

ORM查询练习

ORM查询的练习题

ORM代码

from django.db import models

# Create your models here.
class Publisher(models.Model):
    name = models.CharField(max_length=32)
    city = models.CharField(max_length=32)

    def __str__(self):
        return self.name


class Book(models.Model):
    title = models.CharField(max_length=32)
    publish_date = models.DateField(auto_now_add=True)
    price = models.DecimalField(max_digits=5, decimal_places=2)

    publisher = models.ForeignKey(to="Publisher")

    def __str__(self):
        return self.title

class Author(models.Model):
    name = models.CharField(max_length=32)
    age = models.IntegerField()
    phone = models.IntegerField()
    books = models.ManyToManyField(to="Book", related_name="authors")
    detail = models.OneToOneField(to="AuthorDetail")

    def __str__(self):
        return self.name


class AuthorDetail(models.Model):
    bobby = models.CharField(max_length=32)
    addr = models.CharField(max_length=128)

查询代码

import os
import sys

if __name__ == '__main__':
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ormday70.settings")
    import django

    django.setup()

    from app01 import models

    # 查找所有书名里包含沙河的书
    ret = models.Book.objects.filter(title__contains="沙河")
    print(ret)

    # 查找所有出版日期是2018年的书
    ret = models.Book.objects.filter(publish_date__year=2018)
    print(ret)

    # 查找价格大于10元的书
    ret = models.Book.objects.filter(price__gt=10)
    print(ret)

    # 找到在沙河的出版社
    ret = models.Publisher.objects.filter(city="沙河")
    print(ret)

    # distinct
    # 查所有书关联的出版社
    ret = models.Book.objects.all().values_list("publisher__name")
    print(ret)
    # distinct去重
    print(ret.distinct())

    # 将所有的书按照价格倒叙排序
    # 默认排序
    ret = models.Book.objects.all().order_by("price")
    print(ret)
    # 倒序
    print(ret.reverse())
    # 同时,支持使用减号表示倒序排序
    ret = models.Book.objects.all().order_by("-price")
    print(ret)

    # 查询书名是沙河异闻录的书的出版社的city
    ret = models.Book.objects.filter(title="沙河异闻录").values_list("publisher__city")
    print(ret)

    # 查询书名是沙河异闻录的书的作者的爱好(夸两张表)
    ret = models.Book.objects.filter(title="沙河异闻录").values("authors__detail__bobby")
    print(ret)



 

转载于:https://www.cnblogs.com/banshaohuan/p/9455711.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值