软件测试|Pydantic处理时间类型数据

2024-01-16 20:52

本文主要是介绍软件测试|Pydantic处理时间类型数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简介

我们之前介绍过使用pydantic验证数据,比如校验数据的格式等,但是在我们的日常工作中,还有一种数据是需要我们验证的,比如时间数据,时间数据不同于字符串,列表等数据,与他们的验证不一样,本文就来为大家介绍一下pydantic如何验证时间数据。

datetime时间类型处理

首先,datetime有以下不同的数据:

  • datetime, 现有datetime对象
  • int或float,假定为 Unix 时间,即自 1970 年 1 月 1 日以来的秒数(if >= -2e10 or <= 2e10))或毫秒 (if < -2e10or > 2e10)
  • str, 则类似:YYYY-MM-DD[T]HH:MM[:SS[.ffffff]][Z or [±]HH[:]MM]]]int或float作为字符串(假定为 Unix 时间)

处理datetime数据,代码如下:

from datetime import datetime
from pydantic import BaseModel, validatorclass Book(BaseModel):id: intname: strcreate_time: datetime = None@validator('create_time', pre=True, always=True)def set_create_now(cls, v):return v or datetime.now()#  1.传datetime 对象
book1 = Book(id=1, name='muller', create_time=datetime.now())
print(book1.json())# 2.传字符串
book2 = Book(id=2, name='theshy', create_time="2023-10-24T12:00:10.707257")
print(book2.json())# 3.Unix 时间戳
book2 = Book(id=3, name='langx', create_time=1645506606260)
print(book2.json())-----------
输出结果如下:
{"id": 1, "name": "muller", "create_time": "2023-10-25T14:36:27.550312"}
{"id": 2, "name": "theshy", "create_time": "2023-10-24T12:00:10.707257"}
{"id": 3, "name": "langx", "create_time": "2022-02-22T05:10:06.260000+00:00"}

date 日期类型

date日期数据类型可能是以下类型:

  • date, 现有date对象
  • int或float,见datetime Unix 时间
  • str, 有效格式:YYYY-MM-DD int或float

处理date日期数据类型,代码如下:

from datetime import datetime, date
from pydantic import BaseModel, validatorclass Book(BaseModel):id: intname: strcreate_time: date = None@validator('create_time', pre=True, always=True)def set_create_now(cls, v):return v or date.today()#  1.传date 对象
book1 = Book(id=1, name='python', create_time=date.today())
print(book1.json())# 2.传字符串
book2 = Book(id=2, name='python', create_time="2023-10-01")
print(book2.json())# 3.Unix 时间戳
book2 = Book(id=3, name='python', create_time=1645506606260)
print(book2.json())-----------------
输出结果如下:
{"id": 1, "name": "python", "create_time": "2023-10-25"}
{"id": 2, "name": "python", "create_time": "2023-10-01"}
{"id": 3, "name": "python", "create_time": "2022-02-22"}

time时间点处理

time字段可以是:

  • time, 现有time对象
  • str, 以下格式有效:HH:MM[:SS[.ffffff]][Z or [±]HH[:]MM]]]

要对time进行处理,代码如下:

from datetime import datetime, date, time, timedelta
from pydantic import BaseModel, validatorclass Book(BaseModel):id: intname: strcreate_time: time#  1.传time 对象
book1 = Book(id=1, name='theshy', create_time=time(15, 26, 16))
print(book1.json())# 2.传字符串
book2 = Book(id=2, name='rookie', create_time="15:26:16")
print(book2.json())------------
输出结果如下:
{"id": 1, "name": "theshy", "create_time": "15:26:16"}
{"id": 2, "name": "rookie", "create_time": "15:26:16"}

timedelta时间差

timedelta对象表示的是两个时间点的时间差,两个datedatetime对象相减就可以返回一个timedelta对象。timedelta字段可以是:

  • timedelta, 现有timedelta对象
  • intfloat, 假定为秒
  • str, 以下格式有效:[-][DD ][HH:MM]SS[.ffffff] 和 [±]P[DD]DT[HH]H[MM]M[SS]S

要对时间差数据进行处理,代码如下:

from datetime import date, datetime, time, timedelta
from pydantic import BaseModelclass Model(BaseModel):d: date = Nonedt: datetime = Nonet: time = Nonetd: timedelta = Nonem = Model(d=1966280412345.6789,dt='2032-04-23T10:20:30.400+02:30',t=time(4, 8, 16),td='P3DT12H30M5S',
)print(m.dict())--------------
输出结果如下:
{'d': datetime.date(2032, 4, 22), 
'dt': datetime.datetime(2032, 4, 23, 10, 20, 30, 400000, tzinfo=datetime.timezone(datetime.timedelta(seconds=9000))), 
't': datetime.time(4, 8, 16), 
'td': datetime.timedelta(days=3, seconds=45005)}

总结

本文主要介绍了pydantic对于时间数据的处理,不只是datetime数据,还有日期,时间点,时间差等数据的验证处理,希望本文对大家有所帮助。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

这篇关于软件测试|Pydantic处理时间类型数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/613863

相关文章

Java利用@SneakyThrows注解提升异常处理效率详解

《Java利用@SneakyThrows注解提升异常处理效率详解》这篇文章将深度剖析@SneakyThrows的原理,用法,适用场景以及隐藏的陷阱,看看它如何让Java异常处理效率飙升50%,感兴趣的... 目录前言一、检查型异常的“诅咒”:为什么Java开发者讨厌它1.1 检查型异常的痛点1.2 为什么说

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估

Java整合Protocol Buffers实现高效数据序列化实践

《Java整合ProtocolBuffers实现高效数据序列化实践》ProtocolBuffers是Google开发的一种语言中立、平台中立、可扩展的结构化数据序列化机制,类似于XML但更小、更快... 目录一、Protocol Buffers简介1.1 什么是Protocol Buffers1.2 Pro

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

Java异常捕获及处理方式详解

《Java异常捕获及处理方式详解》异常处理是Java编程中非常重要的一部分,它允许我们在程序运行时捕获并处理错误或不预期的行为,而不是让程序直接崩溃,本文将介绍Java中如何捕获异常,以及常用的异常处... 目录前言什么是异常?Java异常的基本语法解释:1. 捕获异常并处理示例1:捕获并处理单个异常解释:

Python实现数据可视化图表生成(适合新手入门)

《Python实现数据可视化图表生成(适合新手入门)》在数据科学和数据分析的新时代,高效、直观的数据可视化工具显得尤为重要,下面:本文主要介绍Python实现数据可视化图表生成的相关资料,文中通过... 目录前言为什么需要数据可视化准备工作基本图表绘制折线图柱状图散点图使用Seaborn创建高级图表箱线图热