python基礎教程sqlalchemy實現時間列自動更新教程
更多python教程請到:
一、使用場景需求
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 relationshipfrom 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, timedeltaNOW = 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實現時間列自動更新教程就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援菜鳥教程www.piaodoo.com。