溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

sqlalchemy實現時間列自動更新教程

發布時間:2020-09-14 17:28:15 來源:腳本之家 閱讀:207 作者:水痕01 欄目:開發技術

一、使用場景需求

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實現時間列自動更新教程就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女