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的Flask框架中的Jinja2模板引擎学习教程
Jun 30 Python
python使用 HTMLTestRunner.py生成测试报告
Oct 20 Python
手把手教你用python抢票回家过年(代码简单)
Jan 21 Python
python连接mongodb密码认证实例
Oct 16 Python
python在新的图片窗口显示图片(图像)的方法
Jul 11 Python
Python使用百度api做人脸对比的方法
Aug 28 Python
pycharm设置python文件模板信息过程图解
Mar 10 Python
详解用Python进行时间序列预测的7种方法
Mar 13 Python
Python 多线程共享变量的实现示例
Apr 17 Python
Python使用requests模块爬取百度翻译
Aug 25 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
Nov 24 Python
Python使用socket去实现TCP客户端和TCP服务端
Apr 12 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
Codeigniter中禁止A Database Error Occurred错误提示的方法
2014/06/12 PHP
Yii中使用PHPExcel导出Excel的方法
2014/12/26 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
2015/08/18 PHP
Thinkphp框架开发移动端接口(1)
2016/08/18 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
Laravel validate error处理,ajax,json示例
2019/10/25 PHP
javascript 客户端验证上传图片的大小(兼容IE和火狐)
2009/08/15 Javascript
关于jQuery参考实例2.0 用jQuery选择元素
2013/04/07 Javascript
html dom节点操作(获取/修改/添加或删除)
2014/01/23 Javascript
使用RequireJS优化JavaScript引用代码的方法
2015/07/01 Javascript
浅谈JavaScript中的分支结构
2016/07/01 Javascript
jquery点击切换背景色的简单实例
2016/08/25 Javascript
javascript this详细介绍
2016/09/19 Javascript
jQuery 遍历map()方法详解
2016/11/04 Javascript
Vue 使用formData方式向后台发送数据的实现
2019/04/14 Javascript
vue-drag-chart 拖动/缩放图表组件的实例代码
2020/04/10 Javascript
[00:12]2018DOTA2亚洲邀请赛 Somnus丶M出阵单挑
2018/04/06 DOTA
Python3基础之输入和输出实例分析
2014/08/18 Python
Python smallseg分词用法实例分析
2015/05/28 Python
python中os模块详解
2016/10/14 Python
安装Python的教程-Windows
2017/07/22 Python
python PIL/cv2/base64相互转换实例
2020/01/09 Python
pyecharts动态轨迹图的实现示例
2020/04/17 Python
scrapy中如何设置应用cookies的方法(3种)
2020/09/22 Python
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
进程的查看和调度分别使用什么命令
2015/03/25 面试题
外贸业务员求职信范文
2013/12/12 职场文书
大学系主任推荐信范文
2013/12/24 职场文书
社区志愿者心得体会
2014/01/03 职场文书
2014学习全国两会精神心得体会2000字
2014/03/11 职场文书
网络技术专业求职信
2014/05/02 职场文书
体育系毕业生自荐信
2014/06/28 职场文书
稽核岗位职责
2015/02/10 职场文书
经营场所证明范本
2015/06/19 职场文书
从零开始在Centos7上部署SpringBoot项目
2022/04/07 Servers
HTML5中的DOCUMENT.VISIBILITYSTATE属性详解
2023/05/07 HTML / CSS