* 非空判断
if param is None: //只判断 null 值
if not param: //判断 null 值同时判断字段是否空值
* if - else if - else 写法:
if self.returned_at:
return "已還書"
elif self.overdue_settled:
return "借閱中(已繳部分金額)"
else:
return "借閱中(已繳部分金額)"
* 异常写法
try:
histories = histories.filter(returned_at__date=returned_at)
except Exception as e:
print("查询异常:",e)
* 时间获取
获取当前时间:
from datetime import datetime
current_time = datetime.now() //精确到时分秒【对应 db 的 timestamptz 类型】
current_date = datetime.now().date() //精确到天的时间【对应 db 的 date 类型,精确到天或者时分秒的变量,在 filter 中都不可混用】
自定义指定时间:
time = datetime(2024, 4, 14, 0, 0, 0)
time = date(2024, 4, 14)
字符串和时间之间的转换,假如有字符串时间为:date_str = %Y-%m-%d %H:%M:%S
字符串转成时间:【strptime 方法,str 字符串,time 时间,p 表示“解析”,解析成时间】
from datetime import datetime
date_time = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S')
如果想提取到天的时间,则:date_time_day = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S').date()
如果想提取到秒的时间,则:date_time_day = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S').second()
时间转成字符串:【strftime 方法,str 字符串,time 时间,f 表示“格式化”,格式换成字符串】
str_now = now.strftime('%Y-%m-%d %H:%M:%S')
* 判断字符串中是否包含某个字符
if 'xx' not in username: //检查 username 是否不包含 xx 片段(如果要检查包含,去掉 not 即可)
if not username.startswith('xx'): //检查 username 前缀是否不包含 xx 片段(如果包含,去掉 not 即可)
* 转成大写:
str.upper()
* 转成小写:
str.lower()
* 查询操作
History.objects.get(pk=xx) 查询一条数据【可以使用 pk 来代替表中的主键字段,也可以直接写主键字段名】
History.objects.filter(pk=xx) 查询一个集合
* and 操作【注意:判断 null 是直接根据 = 后面的 False 或者 True 来决定的,__isnull 是固定的,并没有 __isnotnull 的写法】
histories = histories.filter(returned_at__isnull=False,returned_at='2')
这句类型 sql 里面的
wherer returned_at is not null and returned_at = '2'
* or 操作
histories = histories.filter(Q(returned_at__isnull=True) | Q(returned_at=''))
这句类型 sql 里面的
wherer returned_at is null or returned_at = ''
* 模糊查询【同时不区分大小写,如果要区分大小写,去掉前面的 i 即可,即:contains,startswith,endswith】
students = User.objects.filter(email__icontains=key) --> sql where email like '%key%'
students = User.objects.filter(email__istartswith=key) --> sql where email like 'key%'
students = User.objects.filter(email__iendswith=key) --> sql where email like '%key'
* 精准匹配
students = User.objects.filter(email=key) --> sql where email = 'key'
(或者:students = User.objects.filter(email__exact=key),exact 表示区分大小写,在英文查询的时候有用,否则和上一句作用完全一样)
(所以:students = User.objects.filter(email__iexact=key),不区分大小写的精确匹配)
* django 很多查询操作,都是在字段后面使用两个下划线 __ 来操作的,比如:【包含等于使用 filter ,不包含不等于使用:exclude】
in 操作:User.objects.filter(email__in=[a,b]) --> where email in (a,b)
not in 操作:User.objects.exclude(email__in=[a,b]) --> where email not in (a,b)
= 操作:User.objects.filter(email=a)
!= 操作:User.objects.exclude(email=a)
>= 操作:User.objects.filter(age__gte=a)
<= 操作:User.objects.filter(age__lte=a)
Histroy 关联了 book 表,利用 book 表的 acno 字段不区分大小写查询
history = History.objects.get(book__acno__iexact=acno) //两个 __ 是链表里面的字段,history 表和 book 表链表,同时 book 表的 acno 字段参与判断
Histroy 单表利用自己表的 book_acno 字段不区分大小写查询
history = History.objects.get(book_acno__iexact=acno) //一个 _ 是单表里面的字段,book_acon 是 history 表里面的字段,参与判断
* 正序排列和倒叙排列
history = History.objects.filter(book=acno).order_by('create_ts') 类型 sql 中的 where book = acno order by create_ts
history = History.objects.filter(book=acno).order_by('-create_ts') 类型 sql 中的 where book = acno order by create_ts desc
翻译
搜索
复制
标签:__,django,filter,book,objects,sql,date,操作,email From: https://www.cnblogs.com/xuehuashanghe/p/18149003