如果你想控制一個 Flask SQLAlchemy 的?db.Column
?只存儲非負整數(即 0 或正整數),你可以在模型中使用驗證來確保這一點。一種常見的方法是使用模型的?validate
?方法或者在執行插入或更新操作時進行檢查。
以下是實現這一目標的幾種方法:
方法 1:使用自定義驗證
你可以重寫模型的?__init__
?方法,或者在定義 setter 方法時加入驗證:
from flask_sqlalchemy import SQLAlchemydb = SQLAlchemy()class MyModel(db.Model):id = db.Column(db.Integer, primary_key=True)non_negative_integer = db.Column(db.Integer, nullable=False, default=0)def __init__(self, non_negative_integer=0, *args, **kwargs):if non_negative_integer < 0:raise ValueError("non_negative_integer must be non-negative")self.non_negative_integer = non_negative_integersuper().__init__(*args, **kwargs)# 或者也可以定義一個 setter 方法
@property
def non_negative_integer(self):return self._non_negative_integer@non_negative_integer.setter
def non_negative_integer(self, value):if value < 0:raise ValueError("non_negative_integer must be non-negative")self._non_negative_integer = value
方法 2:在數據插入或更新的時候檢查
在每次插入或更新數據之前,可以進行檢查:
def create_model(non_negative_integer):if non_negative_integer < 0:raise ValueError("non_negative_integer must be non-negative")new_model = MyModel(non_negative_integer=non_negative_integer)db.session.add(new_model)db.session.commit()
方法 3:使用 SQLAlchemy 的檢查約束
如果你使用 PostgreSQL 或支持 SQL 檢查約束的數據庫,可以在模型中添加一個另外的約束來限制負值:
from sqlalchemy import CheckConstraintclass MyModel(db.Model):__tablename__ = 'my_model'id = db.Column(db.Integer, primary_key=True)non_negative_integer = db.Column(db.Integer, nullable=False, default=0)__table_args__ = (CheckConstraint('non_negative_integer >= 0', name='check_non_negative_integer'),)
以上方法可以幫助你確保?non_negative_integer
?列只能存儲非負整數。選擇使用哪種方法取決于你的具體需求和項目結構。