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 分析Nginx访问日志并保存到MySQL数据库实例
Mar 13 Python
Python 2.7.x 和 3.x 版本的重要区别小结
Nov 28 Python
在Python中使用itertools模块中的组合函数的教程
Apr 13 Python
栈和队列数据结构的基本概念及其相关的Python实现
Aug 24 Python
Python制作豆瓣图片的爬虫
Dec 28 Python
python批量赋值操作实例
Oct 22 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
Nov 21 Python
linux下安装python3和对应的pip环境教程详解
Jul 01 Python
使用python实现多维数据降维操作
Feb 24 Python
tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this T
Jun 22 Python
python为什么要安装到c盘
Jul 20 Python
python 用opencv实现霍夫线变换
Nov 27 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
程序员编程十条戒律
2009/07/09 PHP
php DOS攻击实现代码(附如何防范)
2012/05/29 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
JS 继承实例分析
2008/11/04 Javascript
javascript 添加和移除函数的通用方法
2009/10/20 Javascript
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
2010/06/02 Javascript
javascript 函数参数限制说明
2010/11/19 Javascript
广泛收集的jQuery拖放插件集合
2012/04/09 Javascript
jquery中 $.expr使用实例介绍
2014/06/09 Javascript
jQuery实现的经典竖向伸缩菜单效果代码
2015/09/24 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
Angular实现form自动布局
2016/01/28 Javascript
一次$.getJSON不执行的简单记录
2016/07/19 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
jQuery网页定位导航特效实现方法
2016/12/19 Javascript
Bootstrap的基本应用要点浅析
2016/12/19 Javascript
Javascript中将变量转换为字符串的三种方法
2017/09/19 Javascript
Angular-UI Bootstrap组件实现警报功能
2018/07/16 Javascript
JS 中可以提升幸福度的小技巧(可以识别更多另类写法)
2018/07/28 Javascript
vue elementUI table表格数据 滚动懒加载的实现方法
2019/04/04 Javascript
vue-router定义元信息meta操作
2020/12/07 Vue.js
Python使用BeautifulSoup库解析HTML基本使用教程
2016/03/31 Python
python求平均数、方差、中位数的例子
2019/08/22 Python
关于css兼容性问题及一些常见问题汇总
2016/05/03 HTML / CSS
html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点
2013/01/09 HTML / CSS
StubHub哥伦比亚:购买和出售您的门票
2016/10/20 全球购物
总经理职责范文
2013/11/08 职场文书
搬家公司的创业计划书
2014/01/01 职场文书
清正廉洁演讲稿
2014/05/22 职场文书
赞美老师的演讲稿
2014/05/22 职场文书
党性观念心得体会
2014/09/03 职场文书
主持人开幕词
2015/01/29 职场文书
新闻稿怎么写
2015/07/18 职场文书
公司会议开幕词
2016/03/03 职场文书
QT连接MYSQL数据库的详细步骤
2021/07/07 MySQL
mysql数据库如何转移到oracle
2022/12/24 MySQL