首页 > 数据库 >django sql 操作

django sql 操作

时间:2024-04-21 17:11:32浏览次数:20  
标签:__ django filter book objects sql date 操作 email

* 非空判断

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

相关文章

  • sql server 的一些功能
    1 添加 applicationname  结果 2 /******SSMS的SelectTopNRows命令的脚本******/setstatisticstimeonsetstatisticsioonSELECTTOP(1000)[ID],[CreateTime],[ProductID],[Count]FROM[Order].[dbo].[Orders]  ......
  • MySQL安装部署
    1.查看是否已经安装Mysqlrpm-qa|grepmysql如果你查看出来有东西,可以使用下面命令将其删除(xxx为文件全名)rpm-exxx例如:rpm-qa|grepmariadb#mariadb-libs-5.5.68-1.el7.x86_64rpm-e--nodepsmariadb-libs-5.5.68-1.el7.x86_642.下载官方Mysql包1.......
  • 人形机器人 —— NVIDIA公司给出的操作算法(动态操作任务,dynamic manipulation tasks)(机
    原文:https://developer.nvidia.com/isaac/manipulator#foundation-modelsNVIDIA公司准备针对人形机器人的各部分操作分别推出一个AI框架,如:步态控制、3D感知、抓取操作、避障和规划,等等,本文介绍的就是NVIDIA计划推出的操作任务的算法的AI框架(manipulationtasks)。......
  • c语言操作符详解
    1,算数操作符%两个操作数必须为整数/2,移位操作符(只作用于整数)整数的二进制表示有原码,反码,补码,存储到内存的是补码,用的也是补码进行运算举例10000000000000000000000000000001------原码11111111111111111111111111111110    ------反码正数的反码是其本身,负数的......
  • SQLITE
    SQLITE1.简介1>DDL-数据定义语言命令描述CREATE创建一个新的表,一个表的视图,或者数据库中的其他对象。ALTER修改数据库中的某个已有的数据库对象,比如一个表。DROP删除整个表,或者表的视图,或者数据库中的其他对象。2>DML-数据操作语言命令描述INSER......
  • 发转数组的操作
    publicclassDemo4{publicstaticvoidmain(String[]args){int[]arrays={1,2,3,4,5};//printArrary(arrays);//JDK1.5,没有下标//for(intarray:arrays){//System.out.println(array);//array代表数组的数值int[]reverse=reverse(arrays);printArrary(re......
  • ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib
    ERROR2002(HY000):Can'tconnecttolocalMySQLserverthroughsocket'/var/lib/mysql/mysql.sock'(2)=====================================================步骤:以下可用。(1)关闭mysql:servicemysqldstop(2)查看mysql.sock的位置(base)[root@VM-0-2-ce......
  • 在Linux中,如何实现虚拟机和容器之间的互操作性?
    在Linux中,实现虚拟机和容器之间的互操作性是一个涉及多个步骤的过程。以下是一些关键的步骤和考虑因素:选择适合的虚拟化技术和容器技术:虚拟化技术:常见的虚拟化技术有VMware、VirtualBox等。它们允许你在一个物理机上创建和运行多个虚拟机,每个虚拟机都有自己的操作系统和应用程......
  • 解决 macOS 下 Python 3.8 安装 mysqlclient 的问题
    环境背景Python版本:3.8macOS版本:14.4(M2芯片)在安装mysqlclient时遇到的问题我在网上找到的方案基本上都是通过brewinstallmysql-connector-c安装、修改mysql_config文件、安装openssl及gcc,这个解决方案对我并没有效果解决方案步骤一:配置环境变量#使用pkg-config......
  • influxdb 使用Influx CLI 命令操作数据
    一、安装并使用influxCLI客户端下载地址:https://docs.influxdata.com/influxdb/v2/tools/influx-cli/二、需要下载influx服务器端和CLI工具influxd:influx数据库的服务端。下载地址:https://dl.influxdata.com/influxdb/releases/influxdb2-2.7.5-windows.zipinflux:连接influ......