sqlalchemy实现时间列自动更新教程


Posted in Python onSeptember 02, 2020

一、使用场景需求

1、在实际项目开发过程中,用户可以操作的数据,我们往往会新增一个字段,来保存用户最后一次修改时间

2、一些系统中,我们需要存储用户最后一次登录时间,来统计用户的活跃度

二、 在sqlalchemy中常规的做法

1、数据模型

import datetime
from uuid import uuid4
from sqlalchemy import Column, Integer, String, DateTime, Boolean
from sqlalchemy_demo.connect import Base
class UserModule(Base):
  """
  创建一个用户的数据模型
  """
  __tablename__ = 'user'

  uuid = Column(String(36), unique=True, nullable=False, default=lambda: str(uuid4()), comment='uuid')
  id = Column(Integer, primary_key=True, autoincrement=True, comment='用户id')
  user_name = Column(String(30), nullable=False, unique=True, comment='用户名')
  password = Column(String(64), nullable=False, comment='用户密码')
  createtime = Column(DateTime, default=datetime.datetime.now, comment='创建时间')
  updatetime = Column(DateTime, default=datetime.datetime.now, comment='修改时间')
  is_lock = Column(Boolean, default=False, nullable=False, comment='是否锁住用户')

2、每次更新数据的时候,需要手动插入时间字段,来确保updatetime这个时间字段才会更新

三、使用自动更新数据

基于上面手动插入时间字段,在开发过程中很不方便,我们需要的是类似django中修改数据,该列会自动更新

1、导包

from uuid import uuid4
from sqlalchemy import Column, Integer, String, DateTime, Boolean, TIMESTAMP, func
from sqlalchemy.orm import relationship

from sqlalchemy_demo.connect import Base

2、定义数据模型

class UserModule(Base):
  """
  创建一个用户的数据模型
  """
  __tablename__ = 'user'

  uuid = Column(String(36), unique=True, nullable=False, default=lambda: str(uuid4()), comment='uuid')
  id = Column(Integer, primary_key=True, autoincrement=True, comment='用户id')
  user_name = Column(String(30), nullable=False, unique=True, comment='用户名')
  password = Column(String(64), nullable=False, comment='用户密码')
  createtime = Column(DateTime, server_default=func.now(), comment='创建时间')
  # onupdate设置自动更改
  updatetime = Column(DateTime, server_default=func.now(), onupdate=func.now(), comment='修改时间')
  is_lock = Column(Boolean, default=False, nullable=False, comment='是否锁住用户')

3、接下来的创建表与增删改查都一样的。

补充知识:Flask-SQLALchemy对表中数据按时间进行统计

例如表的结构如下:

class Status(db.Model):
  id = db.Column(db.Integer, primary_key=True)
  submit_time = db.Column(db.DateTime, default=datetime.now())

其中,Status表接受用户的提交,现在想对用户的提交情况按时间进行统计。例如过去24小时,每小时的提交次数;过去12个月,每个月的提交次数。

python代码实现查询如下:

from datetime import datetime, timedelta
 
NOW = datetime.utcnow()
last_24h_submits_count = []
for h in xrange(1,25):
  count = session.query(Status).filter(Status.submit_time.between(NOW - timedelta(seconds=h*3600-1), NOW - timedelta(hours=h-1))).count()
  last_24h_submits_count.append(count)

以上这篇sqlalchemy实现时间列自动更新教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
PHP webshell检查工具 python实现代码
Sep 15 Python
pyqt4教程之实现windows窗口小示例分享
Mar 07 Python
简单介绍Python中的len()函数的使用
Apr 07 Python
Python中MySQLdb和torndb模块对MySQL的断连问题处理
Nov 09 Python
Python多层嵌套list的递归处理方法(推荐)
Jun 08 Python
Python中的with语句与上下文管理器学习总结
Jun 28 Python
Python实现字典去除重复的方法示例
Jul 31 Python
初探TensorFLow从文件读取图片的四种方式
Feb 06 Python
pytorch多GPU并行运算的实现
Sep 27 Python
python 字典有序并写入json文件过程解析
Sep 30 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
Oct 16 Python
python调用百度API实现人脸识别
Nov 17 Python
解决Python 函数声明先后顺序出现的问题
Sep 02 #Python
解决Python3.8运行tornado项目报NotImplementedError错误
Sep 02 #Python
详解python with 上下文管理器
Sep 02 #Python
Python 的 __str__ 和 __repr__ 方法对比
Sep 02 #Python
Python datetime 如何处理时区信息
Sep 02 #Python
浅析python中的del用法
Sep 02 #Python
浅析NumPy 切片和索引
Sep 02 #Python
You might like
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
IIS下PHP的三种配置方式对比
2014/11/20 PHP
php轻量级的性能分析工具xhprof的安装使用
2015/08/12 PHP
phpStudy2016 配置多个域名期间遇到的问题小结
2017/10/19 PHP
详细介绍8款超实用JavaScript框架
2013/10/25 Javascript
node.js中的querystring.escape方法使用说明
2014/12/10 Javascript
javascript实现确定和取消提示框效果
2015/07/10 Javascript
IE中document.createElement的iframe无法设置属性name的解决方法
2015/09/14 Javascript
比较常见的javascript中定义函数的区别
2015/11/09 Javascript
详解vue渲染从后台获取的json数据
2017/07/06 Javascript
bootstrap Table插件使用demo
2017/08/07 Javascript
vue2.0 常用的 UI 库实例讲解
2017/12/12 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
JS实现小星星特效
2019/12/24 Javascript
JS变量提升原理与用法实例浅析
2020/05/22 Javascript
[04:45]DOTA2上海特级锦标赛主赛事第四日RECAP
2016/03/06 DOTA
用Python的SimPy库简化复杂的编程模型的介绍
2015/04/13 Python
详解Python最长公共子串和最长公共子序列的实现
2018/07/07 Python
python2与python3共存问题的解决方法
2018/09/18 Python
Python序列化pickle模块使用详解
2020/03/05 Python
Python AutoCAD 系统设置的实现方法
2020/04/01 Python
python使用OpenCV模块实现图像的融合示例代码
2020/04/10 Python
python 通过pip freeze、dowload打离线包及自动安装的过程详解(适用于保密的离线环境
2020/12/14 Python
西班牙在线宠物商店:zooplus.es
2017/02/24 全球购物
校运会广播稿100字
2014/01/27 职场文书
采购经理岗位职责
2014/02/16 职场文书
金融学专业大学生职业生涯规划
2014/03/07 职场文书
经典毕业生求职信
2014/07/12 职场文书
法人代表证明书
2014/09/18 职场文书
物业工程部经理岗位职责
2015/04/09 职场文书
新生儿未入户证明
2015/06/23 职场文书
2015年小学生暑假总结
2015/07/13 职场文书
解决MySQL添加新用户-ERROR 1045 (28000)的问题
2022/03/03 MySQL
Pandas数据结构之Series的使用
2022/03/31 Python
《现实主义勇者的王国再建记》第三弹OST全曲试听片段公开
2022/04/04 日漫
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL