一、使用場景需求
- 1、在實際專案開發過程中,使用者可以操作的資料,我們往往會新增一個欄位,來儲存使用者最後一次修改時間
- 2、一些系統中,我們需要儲存使用者最後一次登入時間,來統計使用者的活躍度
二、 在sqlalchemy
中常規的做法
-
1、資料模型
import datetimefrom uuid import uuid4from sqlalchemy import Column, Integer, String, DateTime, Booleanfrom sqlalchemy_demo.connect import Baseclass 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 uuid4from sqlalchemy import Column, Integer, String, DateTime, Boolean, TIMESTAMP, funcfrom 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、接下來的建立表與增刪改查都一樣的