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实现对一个完整url进行分割的方法
Apr 29 Python
Python读取网页内容的方法
Jul 30 Python
Python File readlines() 使用方法
Mar 19 Python
快速解决pandas.read_csv()乱码的问题
Jun 15 Python
django 捕获异常和日志系统过程详解
Jul 18 Python
解决Atom安装Hydrogen无法运行python3的问题
Aug 28 Python
pymysql模块的使用(增删改查)详解
Sep 09 Python
pycharm激活方法到2099年(激活流程)
Sep 22 Python
python 读取、写入txt文件的示例
Sep 27 Python
python爬虫请求库httpx和parsel解析库的使用测评
May 10 Python
Python中文纠错的简单实现
Jul 07 Python
Python尝试实现蒙特卡罗模拟期权定价
Apr 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
解决中英文字符串长度问题函数
2007/01/16 PHP
php数组合并与拆分实例分析
2015/06/12 PHP
详解PHP的Yii框架中组件行为的属性注入和方法注入
2016/03/18 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
PHP 实现公历日期与农历日期的互转换
2017/09/13 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
js jquery数组介绍
2012/07/15 Javascript
iframe窗口高度自适应的实现方法
2014/01/08 Javascript
jquery ui resize 中border-box的bug修正
2015/04/26 Javascript
JavaScript中判断函数、变量是否存在
2015/06/10 Javascript
js中对函数设置默认参数值的3种方法
2015/10/23 Javascript
jQuery实现限制文本框的输入长度
2017/01/11 Javascript
require.js 加载过程与使用方法介绍
2018/10/30 Javascript
ES6函数实现排它两种写法解析
2020/05/13 Javascript
VueCli4项目配置反向代理proxy的方法步骤
2020/05/17 Javascript
关于IDEA中的.VUE文件报错 Export declarations are not supported by current JavaScript version
2020/10/17 Javascript
Python3 实现文件批量重命名示例代码
2019/06/03 Python
用Python解数独的方法示例
2019/10/24 Python
详解Python中的format格式化函数的使用方法
2019/11/20 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
2020/06/05 Python
利用Python优雅的登录校园网
2020/10/21 Python
结合CSS3的新特性来总结垂直居中的实现方法
2016/05/30 HTML / CSS
借助HTML5 Canvas API制作一个简单的猜字游戏
2016/03/25 HTML / CSS
新加坡最佳婴儿用品店:Mamahood.com.sg
2018/08/26 全球购物
TOWER London官网:鞋子、靴子、运动鞋等
2019/07/14 全球购物
高中毕业自我鉴定
2013/12/22 职场文书
求职信范文英文版
2014/01/05 职场文书
房屋租赁意向书
2014/04/01 职场文书
财务管理专业毕业生求职信
2014/06/02 职场文书
后勤管理员岗位职责
2014/08/27 职场文书
简单租房协议书
2014/10/21 职场文书
学生检讨书如何写
2014/10/30 职场文书
幼儿园安全教育月活动总结
2015/05/08 职场文书
少先队工作总结2015
2015/05/13 职场文书
同意报考公务员证明
2015/06/17 职场文书
详解Java ES多节点任务的高效分发与收集实现
2021/06/30 Java/Android