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功能键的读取方法
May 28 Python
Python学生信息管理系统修改版
Mar 13 Python
Python图像处理之识别图像中的文字(实例讲解)
May 10 Python
对dataframe进行列相加,行相加的实例
Jun 08 Python
对python中的 os.mkdir和os.mkdirs详解
Oct 16 Python
浅析Python 实现一个自动化翻译和替换的工具
Apr 14 Python
Python迭代器iterator生成器generator使用解析
Oct 24 Python
python多线程实现同时执行两个while循环的操作
May 02 Python
python实现人像动漫化的示例代码
May 17 Python
增大python字体的方法步骤
Jul 05 Python
python判断元素是否存在的实例方法
Sep 24 Python
Django给表单添加honeypot验证增加安全性
May 06 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
推荐一篇入门级的Class文章
2007/03/19 PHP
PHP采集腾讯微博的实现代码
2012/01/19 PHP
深入PHP中的HashTable结构详解
2013/06/13 PHP
php setcookie(name, value, expires, path, domain, secure) 参数详解
2013/06/28 PHP
php获取图片信息的方法详解
2015/12/10 PHP
PHP+Ajax异步带进度条上传文件实例
2016/11/01 PHP
php实现的AES加密类定义与用法示例
2018/01/29 PHP
如何通过javascript操作web控件的自定义属性
2013/11/25 Javascript
javascript鼠标右键菜单自定义效果
2020/12/08 Javascript
JavaScript从0开始构思表情插件
2016/07/26 Javascript
常用的js验证和数据处理总结
2016/08/02 Javascript
实例解析jQuery工具函数
2016/12/01 Javascript
Vue 后台管理类项目兼容IE9+的方法示例
2019/02/20 Javascript
详解JavaScript 浮点数运算的精度问题
2019/07/23 Javascript
在layui框架中select下拉框监听更改事件的例子
2019/09/20 Javascript
[46:55]Ti4 冒泡赛第二轮 LGD vs C9
2014/07/14 DOTA
python根据给定文件返回文件名和扩展名的方法
2015/03/27 Python
Python 2.7中文显示与处理方法
2018/07/16 Python
django 多对多表的创建和插入代码实现
2019/09/09 Python
Python 格式化打印json数据方法(展开状态)
2020/02/27 Python
详解CSS3中强大的filter(滤镜)属性
2017/06/29 HTML / CSS
HTML5 实战PHP之Web页面表单设计
2011/10/09 HTML / CSS
使用canvas绘制贝塞尔曲线
2014/12/17 HTML / CSS
HTML5页面中尝试调起APP功能
2017/09/12 HTML / CSS
html5如何在Canvas中实现自定义路径动画示例
2017/09/18 HTML / CSS
英国现代家具和装饰网站:PN Home
2018/08/16 全球购物
英国自行车商店:AW Cycles
2021/02/24 全球购物
TCP/IP模型的分界线
2012/12/01 面试题
生产管理的三大手法
2013/11/11 职场文书
旷课检讨书1000字
2014/02/14 职场文书
村庄绿化方案
2014/05/07 职场文书
2016年元旦主持词
2015/07/06 职场文书
广告策划的实习心得体会总结!
2019/07/22 职场文书
Python 机器学习工具包SKlearn的安装与使用
2021/05/14 Python
十大好看的穿越动漫排名:《瑞克和莫蒂》第一,国漫《有药》在榜
2022/03/18 日漫
python中的random模块和相关函数详解
2022/04/22 Python