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中pandas.DataFrame排除特定行方法示例
Mar 12 Python
Python内置函数delattr的具体用法
Nov 23 Python
Python解决N阶台阶走法问题的方法分析
Dec 28 Python
Python使用wxPython实现计算器
Jan 30 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
May 10 Python
Python OpenCV处理图像之滤镜和图像运算
Jul 10 Python
python标记语句块使用方法总结
Aug 05 Python
python实现将列表中各个值快速赋值给多个变量
Apr 02 Python
python简单实现最大似然估计&scipy库的使用详解
Apr 15 Python
Python pandas如何向excel添加数据
May 22 Python
Python日志打印里logging.getLogger源码分析详解
Jan 17 Python
理解python中装饰器的作用
Jul 21 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中使用addslashes函数报错问题的解决方法
2013/02/06 PHP
浅析十款PHP开发框架的对比
2013/07/05 PHP
PHP新特性详解之命名空间、性状与生成器
2017/07/18 PHP
用javascript操作xml
2006/11/04 Javascript
浅析javascript闭包 实例分析
2010/12/25 Javascript
javascript判断两个IP地址是否在同一个网段的实现思路
2013/12/13 Javascript
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
2014/10/17 Javascript
jQuery easyui的validatebox校验规则扩展及easyui校验框validatebox用法
2016/01/18 Javascript
数据结构中的各种排序方法小结(JS实现)
2016/07/23 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
2017/03/02 Javascript
js实现网页定位导航功能
2017/03/07 Javascript
JavaScript实现实时更新系统时间的实例代码
2017/04/04 Javascript
在百度搜索结果中去除掉一些网站的资料(通过js控制不让显示)
2017/05/02 Javascript
前端跨域的几种解决方式总结(推荐)
2017/08/16 Javascript
在Js页面通过POST传递参数跳转到新页面详解
2017/08/25 Javascript
JavaScript实现的斑马线表格效果【隔行变色】
2017/09/18 Javascript
mpvue跳转页面及注意事项
2018/08/03 Javascript
Layui给数据表格动态添加一行并跳转到添加行所在页的方法
2018/08/20 Javascript
记一次用vue做的活动页的方法步骤
2019/04/11 Javascript
Ant Design的Table组件去除
2020/10/24 Javascript
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
2017/08/08 Python
python列表生成式与列表生成器的使用
2018/02/23 Python
python线程池threadpool使用篇
2018/04/27 Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
2019/08/06 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
2020/06/15 Python
Python如何实现自带HTTP文件传输服务
2020/07/08 Python
python处理写入数据代码讲解
2020/10/22 Python
IE浏览器单独写CSS样式的几种方法
2014/10/14 HTML / CSS
Yummie官方网站:塑身衣和衣柜必需品
2019/10/29 全球购物
Crocs欧洲官网:Crocs Europe
2020/01/14 全球购物
酒店执行总经理岗位职责
2013/12/15 职场文书
部队领导证婚词
2014/01/12 职场文书
勤奋学习演讲稿
2014/05/10 职场文书
舞蹈教育学专业求职信
2014/06/29 职场文书
2015年办公室主任工作总结
2015/04/09 职场文书
python通过函数名调用函数的几种方法总结
2021/06/07 Python