sqlalchemy时区问题

news/2024/9/28 19:59:57/

问题描述

sqlalchemy查询时间字段时(包含timestamp),查询到python中使用datetime类型接收,不会进行时区类型转换,如果你的机器时区跟数据库时区不一致,就会导致比较时间时出问题。

解决方案

一般镜像默认的时区都是UTC,可以考虑将镜像时区和数据库连接时区都设置成UTC来解决这个问题。

python">from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmakerdb = create_engine(url='mysql+pymysql://<user>:<pass>@<db_host>:<db_port>/<db_name>?charset=utf8mb4',connect_args={'init_command': 'SET time_zone="+00:00"'}
)# Create database session
Session = sessionmaker(bind=db, expire_on_commit=False)

connect_args 是 SQLAlchemy 用于传递额外连接参数的字典,init_command 是其中一个选项。它的作用是在与数据库建立连接后立即执行的 SQL 命令。你可以用它来设置连接的初始状态,例如设置时区、字符集等。
参考文档:https://docs.sqlalchemy.org/en/20/core/engines.html#sqlalchemy.create_engine.params.connect_args

时区转换

可以利用这个方法,将时区转换成sql的时区格式(+08:00)

python">def convert_timezone_to_sql_format(timezone_str: str):
try:# 创建时区对象tz = pytz.timezone(timezone_str)# 获取当前时间在该时区的偏移量(秒)offset = tz.utcoffset(datetime.now()).total_seconds()hours = int(offset // 3600)minutes = int((abs(offset) % 3600) // 60)return f"{hours:+03d}:{minutes:02d}"
except pytz.UnknownTimeZoneError:# 也可以选择抛出异常logging.warning('Unknown timezone: %s, using default timezone UTC', timezone_str)return '+00:00'

时区可以从环境变量TZ中获取,需要注意数据库的时区一定要跟服务器的时区一致,否则时间比较会出问题。


http://www.ppmy.cn/news/1531608.html

相关文章

【开源免费】基于SpringBoot+Vue.JS网上购物商城(JAVA毕业设计)

本文项目编号 T 041 &#xff0c;文末自助获取源码 \color{red}{T041&#xff0c;文末自助获取源码} T041&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计 六、核…

通过 Flink 的火焰图定位反压

在 Apache Flink 中&#xff0c;Web UI 提供了丰富的监控工具来帮助用户分析和解决作业性能问题&#xff0c;其中火焰图&#xff08;Flame Graph&#xff09;是用于分析反压问题的一个强有力的工具。反压可能是由于作业中某些算子处理速度过慢&#xff0c;或者资源耗尽导致的。…

掌上高考爬虫逆向分析

目标网站 aHR0cHM6Ly93d3cuZ2Fva2FvLmNuL3NjaG9vbC9zZWFyY2g/cmVjb21zY2hwcm9wPSVFNSU4QyVCQiVFOCU4RCVBRg 一、抓包分析 二、逆向分析 搜索定位加密参数 本地生成代码 var CryptoJS require(crypto-js) var crypto require(crypto);f "D23ABC#56"function v(t…

微pe和u深度pe哪个好用_微pe和u深度pe对比分析

大家在安装系统时都喜欢用pe来安装&#xff0c;pe安装系统的好处就是稳定可靠&#xff0c;不担心进不了系统。最近有网友问我&#xff0c;微pe和u深度pe哪个好用?下面小编就给大家分析一下微pe和u深度pe对比分析。 微pe和u深度pe哪个好用? 微PE好&#xff0c;目前公认良心PE…

Javascipt的this指向

Javascipt的this指向 一、this是什么&#xff1f; 先说结论&#xff0c;this是用于指代当前执行上下文的对象 二、this指向的是什么 1.当函数作为一个对象的属性被调用时&#xff0c;指向的是最后调用函数的对象 代码如下&#xff08;示例&#xff09;&#xff1a; var ob…

6.微服务架构的一般架构模式概论

TOC Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge Survive. happy for hardess to solve denpendies. 目录 概述 理解一下微服务架构 需求&…

WPF入门教学十九 属性动画与时间线

在WPF中&#xff0c;属性动画是通过改变对象的依赖属性值来创建动画效果的一种方式。时间线&#xff08;Timeline&#xff09;是控制动画播放进度的核心组件。WPF提供了多种类型的动画和时间线&#xff0c;包括DoubleAnimation、ColorAnimation、PointAnimation等&#xff0c;以…

【韩顺平Java笔记】第1章

0-1可以看视频&#xff0c;下面记录主要内容 2. 就业方向 Java基础又叫JavaSE&#xff0c;Java有三个主要的就业方向&#xff1a; JavaEE软件工程师&#xff1a;电商&#xff0c;团购&#xff0c;众筹&#xff0c;sns&#xff08;社交网络&#xff09;&#xff0c;教育&…