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.mzph.cn/news/849556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RE_Python

python的exe文件解包 要确保使用工具的环境是和Python version一样(我这里是需要3.11) 不然,ezpy.exe_extracted文件夹点进去,类似PYZ-00.pyz_extracted的文件夹会是空的!! pyc反编译问题 ImportError:…

3588麒麟系统硬解码实战

目录 安装deb 查找头文件 .pro文件添加 检查库是否已安装 error: stdlib.h: No such file or directory 安装deb sudo dpkg -i package_file.deb其中,package_file.deb是你要安装的deb文件的名称。 使用终端命令和apt工具:打开终端,使用以下命令安装deb文件并解决依赖…

如何执行VMware P2V迁移|VMware Converter和替代方案

VMware中的P2V是什么? 我们常说的VMware P2V其实指的就是“物理到虚拟”,将工作负载从物理机器转换或迁移到虚拟机(VM)的过程,能够使您无需从头开始费力地创建和配置新虚拟机。 就像您可以使用Disk2vhd执行Hyper-V物理…

Python爬虫环境设计:构建高效且灵活的数据抓取生态

Python爬虫环境设计:构建高效且灵活的数据抓取生态 在当今信息爆炸的时代,数据已经成为一种宝贵的资源。Python爬虫作为一种高效的数据抓取工具,受到了广大开发者的青睐。然而,设计一个稳定、高效且灵活的Python爬虫环境并非易事…

mac node版本切换 nvm install nvm ls-remote N/A问题

mac 使用nvm 切换node版本失败或者 nvm install &nvm ls-remote N/A问题 一、出现情况 输入 nvm install v16.18.0输出结果 Version 16.18.0 not found try nvm is-remote•to browse available versions.输入 nvm ls-remote输出结果 N/A二、原因分析 1. 镜像包获取…

关闭文件及使用with语句

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 1 关闭文件 打开文件后,需要及时关闭,以免对文件造成不必要的破坏。关闭文件可以使用文件对象的close()方法实现。close()方…

QGraphicsWidget与QWidget的主要区别是什么?

QGraphicsWidget 和 QWidget 都是 Qt 框架中用于创建用户界面的类,但它们在功能和用途上有一些关键的区别: QGraphicsWidget 属于图形视图框架:QGraphicsWidget 是 QGraphicsItem 的子类,它是 Qt 图形视图框架的一部分&#xff…

C++青少年简明教程:C++函数

C青少年简明教程:C函数 C函数是一段可重复使用的代码,用于执行特定的任务,可以提高代码的可读性和可维护性。函数可以接受参数(输入)并返回一个值(输出),也可以没有参数和返回值。 …

嵌入式Linux系统编程 — 2.4 标准I/O库:I/O缓冲详解

目录 1 I/O 缓冲简介 1.1 什么是I/O 缓冲 1.2 I/O 缓冲的目的 2 文件 I/O 的内核缓冲 3 刷新文件 I/O 的内核缓冲区 3.1 什么是刷新文件 I/O 的内核缓冲区 3.2 控制文件 I/O 内核缓冲的系统调用函数 3.3 示例程序 4 控制文件 I/O 内核缓冲的标志 4.1 O_DSYNC 和 O_SY…

(深度学习记录)第TR4周:Pytorch复现Transformer

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 🏡我的环境: 语言环境:Python3.11.4编译器:Jupyter Notebooktorcch版本:2.0.…

奇思妙想02-高考

又到高考的日子了。 离我的高考已经过去一年了。 2023年的今天,我也在为高考而紧张着。 2024年的今天,我还在为高考紧张着。 或者说在因为高考焦虑吧。 在我的高考中我并没有取得自己的理想成绩,也没有进自己的理想院校。 在读了一年大学…

51.线程池大小

问题 1.线程池太小会导致程序不能充分利用系统资源、容易导致饥饿。 2.线程池过大导致更多的线程上下文切换,占用更多的内存。 情况一:CPU密集型运算 应用程序是做一些数据分析,需要大量的使用cpu,程序代码全部都是跟cpu相关的&#xff0…

fastadmin/thinkPHPQueue消息队列详细教程

thinkphp-queue 是thinkphp 官方提供的一个消息队列服务,它支持消息队列的一些基本特性: 消息的发布,获取,执行,删除,重发,失败处理,延迟执行,超时控制等队列的多队列, 内存限制 ,启动,停止,守护等消息队列可降级为同步执行1、通过composer安装thinkPHP消息队列 …

Java概述 , Java环境安装 , 第一个Hello World

环境变量,HelloWorld 1.会常用的dos命令 2.会安装java所需要的环境(jdk) 3.会配置java的环境变量 4.知道java开发三步骤 5.会java的入门程序(HelloWorld) 6.会三种注释方式 7.知道Java入门程序所需要注意的地方 8.知道println和print的区别第一章 Java概述 1.1 JavaSE体系介绍…

GPT-4 和类似的先进语言模型正在重塑人类与人工智能(AI)互动的方式

GPT-4 和类似的先进语言模型正在重塑人类与人工智能(AI)互动的方式,主要通过以下几种方式: 1. 自然语言理解和生成 GPT-4 能够理解和生成自然语言,使得与 AI 的对话更加自然和人性化。它可以进行多轮对话,理解上下文,生成符合语境的回复。这种能力使 AI 不仅仅是一个工…

Java 并发编程中的 synchronized 关键字及其现代优化技术

文章目录 简介1. 监视器锁(Monitor Lock)与操作系统的 Mutex Lock1.1 监视器锁的工作机制1.2 互斥锁的实现 2. Java 线程与操作系统原生线程2.1 Java 线程的实现2.2 操作系统的线程管理2.3 Java 线程与操作系统线程的关系 3. 线程的挂起和唤醒3.1 上下文…

monaco-editor+vue3+ts+vite实现前端代码编辑器(初版)

最新有个sql在线编辑的需求,网上一些资料比较琐碎,总结归纳一下,复制直接使用 Vue3组件: <template><div id="codeEditBox" :style="height: + height + px"></div> </template><script lang="ts" setup> i…

社区服务支持

社区服务支持 原创 小王搬运工 时序课堂 2024-06-07 19:29 四川 &#x1f31f; 邀请函 | 加入我们的时序数据挖掘社区 &#x1f680; 尊敬的数据爱好者们&#xff0c; 我们诚挚地邀请您加入我们的专业社区——时序数据挖掘社区&#xff0c;一个专注于时序数据分析、挖掘与应…

阿里通义千问,彻底爆了!(本地部署+实测)

点击“终码一生”&#xff0c;关注&#xff0c;置顶公众号 每日技术干货&#xff0c;第一时间送达&#xff01; 问大家一个问题&#xff1a;你是否想过在自己的电脑上部署一套大模型&#xff1f;并用自己的知识库训练他&#xff1f; 阿里通义千问今天发布了最新的开源大模型系…

[力扣题解]

题目&#xff1a;530. 二叉搜索树的最小绝对差 思路 中序遍历 对于二叉搜索树而言&#xff0c;中序遍历可以把树拉直为一个从小到大排序的数组&#xff1b; 代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* Tre…