• Django_数据库增删改查——查


    查:

    contains

    包含,相当于sql的like条件

    Entry.objects.get(headline__contains='Lennon')

    SQL equivalent:

    SELECT ... WHERE headline LIKE '%Lennon%';

    注意:contains区分大小写,icontains不区分大小写。

    in

    在给定的迭代中;通常是列表、元组或查询集。

    Entry.objects.filter(id__in=[1, 3, 4])

    SQL equivalent:

    SELECT ... WHERE id IN (1, 3, 4);

    您还可以使用查询出来的数据来动态地评估值列表,而不是提供一组文字值:

    inner_qs = Blog.objects.filter(name__contains='Cheddar')
    entries = Entry.objects.filter(blog__in=inner_qs)

    SQL equivalent:

    SELECT ... WHERE blog.id IN (SELECT id FROM ... WHERE NAME LIKE '%Cheddar%')

    gt

    Entry.objects.filter(id__gt=4)

    SQL equivalent:

    SELECT ... WHERE id > 4;

    gte
    大于或等于。

    lt
    小于。

    lte
    小于或等于。

    startswith

    区分大小写,以字符串开头。

    Entry.objects.filter(headline__startswith='Lennon')

    SQL equivalent:

    SELECT ... WHERE headline LIKE 'Lennon%';

    istartswith
    不区分大小写,以字符串开头。

    endswith
    区分大小写,以字符串结尾。

    iendswith
    不区分大小写,以字符串结尾。

    range
    区间过渡,可对数字、日期进行过滤

    import datetime
    start_date = datetime.date(2005, 1, 1)
    end_date = datetime.date(2005, 3, 31)
    Entry.objects.filter(pub_date__range=(start_date, end_date))
     models.Account.objects.filter(register_date__range=['2020-3-24','2020-3-25'])

    SQL equivalent:

    SELECT ... WHERE pub_date BETWEEN '2005-01-01' and '2005-03-31';

    警告!

    使用日期过滤DateTimeField将不包括最后一天的项目,因为边界被解释为“给定日期的0am”。如果pub_date是一个DateTimeField,上面的表达式就会变成这个SQL:

    选择……" 2006-01-01 00:00:00 "和" 2006-03-31 00:00:00 "之间的pub_date;

    一般来说,你不能混淆日期和日期时间。

    date

    允许链接额外的字段查找。获取日期值。

    Entry.objects.filter(pub_date__date=datetime.date(2005, 1, 1))
    Entry.objects.filter(pub_date__date__gt=datetime.date(2005, 1, 1))

    year
    允许链接额外的字段查找。取整数年。

    Entry.objects.filter(pub_date__year=2005)
    Entry.objects.filter(pub_date__year__gte=2005)

    SQL equivalent:

    SELECT ... WHERE pub_date BETWEEN '2005-01-01' AND '2005-12-31';
    SELECT ... WHERE pub_date >= '2005-01-01';

    When USE_TZ is True, datetime fields are converted to the current time zone before filtering. 简单解决办法是把USE_TZ=False

    month

    允许链接额外的字段查找。取整数1(1月)到12(12月)。

    Entry.objects.filter(pub_date__month=12)
    Entry.objects.filter(pub_date__month__gte=6)

    When USE_TZ is True, datetime fields are converted to the current time zone before filtering.这需要数据库中的时区定义。

    SQL equivalent:

    SELECT ... WHERE EXTRACT('month' FROM pub_date) = '12';
    SELECT ... WHERE EXTRACT('month' FROM pub_date) >= '6';

    day
    允许链接额外的字段查找。需要一个整数天。

    Entry.objects.filter(pub_date__day=3)
    Entry.objects.filter(pub_date__day__gte=3)

    SQL equivalent:

    SELECT ... WHERE EXTRACT('day' FROM pub_date) = '3';
    SELECT ... WHERE EXTRACT('day' FROM pub_date) >= '3';

    week

    对于日期和日期时间字段,根据ISO-8601返回周数(1-52或53),即在美国,一周从星期一开始,第一周是一年的第一个星期四。

    例子:

    Entry.objects.filter(pub_date__week=52)
    Entry.objects.filter(pub_date__week__gte=32, pub_date__week__lte=38)

    week_day

    允许链接额外的字段查找。取一个整数值,表示从1(星期日)到7(星期六)的星期几。

    例子:

    Entry.objects.filter(pub_date__week_day=2)
    Entry.objects.filter(pub_date__week_day__gte=2)

    hour

    允许链接额外的字段查找。取0到23之间的整数。

    例子:

    Event.objects.filter(timestamp__hour=23)
    Event.objects.filter(time__hour=5)
    Event.objects.filter(timestamp__hour__gte=12)

    SQL equivalent:

    SELECT ... WHERE EXTRACT('hour' FROM timestamp) = '23';
    SELECT ... WHERE EXTRACT('hour' FROM time) = '5';
    SELECT ... WHERE EXTRACT('hour' FROM timestamp) >= '12';

    同时,还支持mintue,second

    Event.objects.filter(time__minute=46)
     
     
    Event.objects.filter(timestamp__second=31)

    isnull

      为真或假,分别对应于IS NULL和IS NOT NULL的SQL查询。

    例子:

    Entry.objects.filter(pub_date__isnull=True)

    SQL equivalent:

    SELECT ... WHERE pub_date IS NULL;

    regex(正则)

      区分大小写的正则表达式匹配。

    例子:

    models.Account.objects.filter(username__regex=r'^(w|y)')

    SQL equivalents:

    SELECT ... WHERE title REGEXP BINARY '^(w|y) +'; -- MySQL

    iregex 大小写不敏感

    数据返回后的展示

    values()

    values(*fields**expressions)

    返回一个QuerySet,它返回字典,而不是模型实例(当用作迭代时)。

    In [7]: models.Account.objects.values()
    Out[7]: <QuerySet [{'id': 2, 'username': '王佃超', 'email': '819699374@qq.com', 'password': 'wdc', 'register_date': datet
    ime.datetime(2020, 3, 24, 14, 56, 20, 333505, tzinfo=<UTC>), 'signature': None}, {'id': 3, 'username': 'yhf', 'email': '4
    8846@qq.com', 'password': '4654879', 'register_date': datetime.datetime(2020, 3, 24, 15, 13, 37, 111371, tzinfo=<UTC>), '
    signature': 'zaqwqw'}, {'id': 4, 'username': 'wdcwdc', 'email': '12314@qq.com', 'password': '1351351345', 'register_date'
    : datetime.datetime(2020, 3, 26, 6, 25, 58, 44693, tzinfo=<UTC>), 'signature': 'test'}]>
    In [7]: models.Account.objects.values()
    Out[6]: <QuerySet [{'id': 4, 'username': 'wdcwdc'}, {'id': 3, 'username': 'yhf'}, {'id': 2, 'username': '王佃超'}]>

    order_by()

    order_by(*fields)
    models.Account.objects.values('id','register_date').order_by('id')
    # 按id排序
    models.Account.objects.values('id','register_date').order_by('-id')
    # 按id倒序
    models.Account.objects.values('id','register_date').order_by('id','register_date')
    # 先按id排序,再按'register_date'排序

    reverse()

    反转:将排序后的内容反转。

     如果想取最后一个字典的内容:可以反转之后取第一个。

     

    排除 id为2 的记录,返回剩下的全部记录。

    count()

    # 返回查询到的记录数量。ret为int类型。
    ret = models.Account.objects.all().count()
    print(ret)

     exist()

    # 判断是否有数据,如果有,返回True,如果没有,返回False
    ret = models.Account.objects.all().exists()
    print(ret)

    values()

    # 设置要查询的字段'username'。(可以放多个值)
    ret = models.Account.objects.all().values('username') print(ret)

      返回值为一个QuerySet的列表,列表中是字典。

     values_list()

    ret = models.Account.objects.all().values_list('username')
    print(ret)

      返回值:

     distinct():去重

  • 相关阅读:
    中国国家授时中心的时间服务器IP地址及时间同步方法
    找不到aspnet用户权限的解决方法
    unbunt下刻录光盘
    关于ubuntu 是否需要使用std::到问题。
    acm题
    IIS发生意外错误0x8ffe2740
    SQL Server Express的使用
    解决用户"sa"登录失败。该用户与可信 sql server 连接无关联。
    在CSDN上的第一篇博客
    在线求助 man page(转)
  • 原文地址:https://www.cnblogs.com/wangdianchao/p/12575827.html
Copyright © 2020-2023  润新知