sqlalchemy实现时间列自动更新教程
程序员文章站
2022-07-04 09:22:35
一、使用场景需求1、在实际项目开发过程中,用户可以操作的数据,我们往往会新增一个字段,来保存用户最后一次修改时间2、一些系统中,我们需要存储用户最后一次登录时间,来统计用户的活跃度二、 在sqlalc...
一、使用场景需求
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实现时间列自动更新教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。