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正则表达式操作指南(re使用)
Sep 06 Python
Python编程语言的35个与众不同之处(语言特征和使用技巧)
Jul 07 Python
python学习之第三方包安装方法(两种方法)
Jul 30 Python
对python捕获ctrl+c手工中断程序的两种方法详解
Dec 26 Python
Python 数据库操作 SQLAlchemy的示例代码
Feb 18 Python
Python3中编码与解码之Unicode与bytes的讲解
Feb 28 Python
python实现矩阵打印
Mar 02 Python
在Python中使用filter去除列表中值为假及空字符串的例子
Nov 18 Python
python获取引用对象的个数方式
Dec 20 Python
Python unittest单元测试框架实现参数化
Apr 29 Python
python如何运行js语句
Sep 09 Python
Python页面加载的等待方式总结
Feb 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 smarty 二级分类代码和模版循环例子
2011/06/16 PHP
php加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
2021/03/09 PHP
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
2009/08/15 Javascript
Javascript 判断Flash是否加载完成的代码
2010/04/12 Javascript
JQuery live函数
2010/12/24 Javascript
JS+CSS设置img在DIV中只显示Img垂直居中的部分
2013/10/24 Javascript
JQUERY dialog的用法详细解析
2013/12/19 Javascript
Jquery实现仿腾讯微博发表广播
2014/11/17 Javascript
javascript实现随机读取数组的方法
2015/08/03 Javascript
javascript图片延迟加载实现方法及思路
2015/12/31 Javascript
详解javascript实现瀑布流列式布局
2016/01/29 Javascript
基于Bootstrap使用jQuery实现输入框组input-group的添加与删除
2016/05/03 Javascript
JavaScript提高加载和执行效率的方法
2017/02/03 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
2017/07/22 jQuery
Angular2 http jsonp的实例详解
2017/08/31 Javascript
官方推荐react-navigation的具体使用详解
2018/05/08 Javascript
最后说说Vue2 SSR 的 Cookies 问题
2018/05/25 Javascript
js实现聊天对话框
2020/02/08 Javascript
在Python中使用itertools模块中的组合函数的教程
2015/04/13 Python
Python最基本的输入输出详解
2015/04/25 Python
Python使用中文正则表达式匹配指定中文字符串的方法示例
2017/01/20 Python
JSON Web Tokens的实现原理
2017/04/02 Python
Python实现发送与接收邮件的方法详解
2018/03/28 Python
python 读取DICOM头文件的实例
2018/05/07 Python
Python使用Socket实现简单聊天程序
2020/02/28 Python
解决python脚本中error: unrecognized arguments: True错误
2020/04/20 Python
Python实现快速大文件比较代码解析
2020/09/04 Python
软件毕业生个人鉴定
2014/03/03 职场文书
2014年会计个人工作总结
2014/11/24 职场文书
餐厅保洁员岗位职责
2015/04/10 职场文书
家长会主持词开场白
2015/05/29 职场文书
学校教学管理制度
2015/08/06 职场文书
django 认证类配置实现
2021/11/11 Python
Python 一键获取电脑浏览器的账号密码
2022/05/11 Python
python语言中pandas字符串分割str.split()函数
2022/08/05 Python