当前位置: 首页 > news >正文

flask_sqlalchemy时间缓存导致datetime.now()时间不变问题

问题是这样的,项目在本地没什么问题,但是部署到服务器过一阵子发现,这个时间会在某一刻定死不变。

在这里插入图片描述

重启uwsgi后,发现第一条数据更新到了目前最新时间,过了一会儿再次发送也变了时间,但是再过几分钟再发就会变成和上次一样的时间。
在这里插入图片描述

我的基类模型是这样写的

class BaseModel(db.Model):""" 基类模型 """__abstract__ = Trueid = db.Column(db.Integer, primary_key=True, comment='id主键')add_time = db.Column(db.DateTime, default=datetime.now(), comment='创建时间')upd_time = db.Column(db.DateTime, default=datetime.now(), onupdate=datetime.now(), comment='更新时间')


从发送到保存都检查了一遍,没有发现什么问题,且检查了debian的时区和date是没问题的,因为python的datetime就是基于系统时间而言去生成的。
在这里插入图片描述



后搜了相关资料发现也有人遇到这个坑,于是记录下来。关键原因在于sqlalchemy的缓存,在于传入 defaultonupdate的默认值是datetime.now(),该函数在模型调用时,就会生成时间,这块的生成会产生缓存,导致时间一直停留,目前推断是这样,具体的原因没有排查到源码层。没追根溯源到底是哪部分造成的缓存。但是经过实际测试在第一次启动uwsgi进行启动时发布是最新的时间数据,然后过了5分钟再次发送也是新的数据。但是再过10分钟再发送就和5分钟前发送的一样了。这块可以看图2



解决方案是需要将时间函数改成函数引用的方式,将now的函数地址传递。这也每次sqlalchemy生成执行sql的时候,将会直接执行函数引用,将 datetime.now当作参数进行传递,并执行。



最终将 datetime.now()改成datetime.now搞定

class BaseModel(db.Model):""" 基类模型 """__abstract__ = Trueid = db.Column(db.Integer, primary_key=True, comment='id主键')add_time = db.Column(db.DateTime, default=datetime.now, comment='创建时间')upd_time = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
http://www.lryc.cn/news/366469.html

相关文章:

  • 使用 PAI-DSW x Free Prompt Editing图像编辑算法,开发个人AIGC绘图小助理
  • Nginx03-动态资源和LNMP介绍与实验、自动索引模块、基础认证模块、状态模块
  • 山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(二十九)- 微服务(9)
  • Matplotlib常见图汇总
  • MTK联发科MT6897(天玑8300)5G智能移动处理器规格参数
  • 【AIoT-Robot】3d hand pose
  • 使用 tc (Traffic Control)控制网络延时
  • android原生TabLayout之自定义指示器效果
  • 最新 HUAWEI DevEco Studio 使用技巧
  • 开源大模型与闭源大模型浅析
  • docker 命令 ps,inspect,top,logs详解
  • Windows 找不到文件‘shell:sendto‘。请确定文件名是否正确后,再试一次
  • 【算法】模拟算法——外观数组(medium)
  • 2024年会计、金融与工商管理国际会议(ICAFBA 2024)
  • 关于 spring boot 的 目录详解 和 配置文件 以及 日志
  • 如何删除电脑端口映射?
  • xiaolingcoding 图解网络笔记——基础篇
  • Docker 容器 mysql 配置主从
  • 64. UE5 RPG 创建新的双手攻击怪物
  • (求一个整数各位数的和)编写程序,读取一个在0和1000之间的整数,并将该整数的各位数字相加。例如:整数是 932,各位数字之和为14。
  • 大模型参加高考,同写2024年高考作文,及格分(通义千问、Kimi、智谱清言、Gemini Advanced、Claude-3-Sonnet、GPT-4o)
  • 【因果推断python】24_倾向得分2
  • 部件库(Widget Factory)
  • tomcat启动闪退解决办法
  • OpenStack云平台管理
  • 内部类(超详细)
  • Android的SELinux详解
  • R语言中的列表list
  • 10、有条件提前退出关键字Return From Keyword If【robot framework】
  • JAVA开发的一套(智造制造领航者云MES系统成品源码)saas云MES制造执行系统源码,全套源码,支持二次开发