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 相关文章推荐
python进阶教程之文本文件的读取和写入
Aug 29 Python
centos 下面安装python2.7 +pip +mysqld
Nov 18 Python
Python修改MP3文件的方法
Jun 15 Python
在Django同1个页面中的多表单处理详解
Jan 25 Python
python获取指定时间差的时间实例详解
Apr 11 Python
Python实现基于二叉树存储结构的堆排序算法示例
Dec 08 Python
Python3中编码与解码之Unicode与bytes的讲解
Feb 28 Python
python 梯度法求解函数极值的实例
Jul 10 Python
python实现银行管理系统
Oct 25 Python
python opencv实现gif图片分解的示例代码
Dec 13 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
Feb 14 Python
python 用Matplotlib作图中有多个Y轴
Nov 28 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
php下的权限算法的实现
2007/04/28 PHP
关于PHP结束标签的使用细节探讨及联想
2013/03/04 PHP
如何使用微信公众平台开发模式实现多客服
2016/01/06 PHP
PHP实现RTX发送消息提醒的实例代码
2017/01/03 PHP
laravel 5.1下php artisan migrate的使用注意事项总结
2017/06/07 PHP
Thinkphp5.0框架视图view的循环标签用法示例
2019/10/12 PHP
JavaScript:Div层拖动效果实例代码
2013/08/06 Javascript
jquery实现点击文字可编辑并修改保存至数据库
2014/04/15 Javascript
JavaScript框架(iframe)操作总结
2014/04/16 Javascript
14个有用的Jquery技巧分享
2015/01/08 Javascript
JavaScript中的DSL元编程介绍
2015/03/15 Javascript
JS日期加减,日期运算代码
2015/11/05 Javascript
JavaScript实现下拉菜单的显示和隐藏
2016/01/05 Javascript
JavaScript-html标题滚动效果的简单实现
2016/09/08 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
2016/11/15 Javascript
微信公众平台开发教程(四) 实例入门:机器人回复(附源码)
2016/12/02 Javascript
微信小程序中的店铺评分组件及vue中用svg实现的评分显示组件
2018/11/16 Javascript
Vue封装全局过滤器Filters的步骤
2020/09/16 Javascript
python益智游戏计算汉诺塔问题示例
2014/03/05 Python
Python2.x版本中maketrans()方法的使用介绍
2015/05/19 Python
分析Python中设计模式之Decorator装饰器模式的要点
2016/03/02 Python
pycharm运行程序时看不到任何结果显示的解决
2020/02/21 Python
用python实现一个简单计算器(完整DEMO)
2020/10/14 Python
Python 实现图片转字符画的示例(静态图片,gif皆可)
2020/11/05 Python
html5关于外链嵌入页面通信问题(postMessage解决跨域通信)
2020/07/20 HTML / CSS
Bibloo荷兰:女士、男士和儿童的服装、鞋子和配饰
2019/02/25 全球购物
纬创Java面试题笔试题
2014/10/02 面试题
大学军训自我鉴定
2013/12/15 职场文书
网上商城创业计划书范文
2014/01/31 职场文书
超市重阳节活动方案
2014/02/10 职场文书
毕业设计致谢词
2015/05/14 职场文书
刑事起诉书范文
2015/05/19 职场文书
接收函
2019/04/22 职场文书
Win11安装受阻怎么办? Windows11安装问题与解决方案汇总
2021/11/21 数码科技
漫画「处刑少女的生存之道」第3卷封面公开
2022/03/21 日漫
spring 项目实现限流方法示例
2022/07/15 Java/Android