首页 > 解决方案 > 验证 sqlalchemy 中的列表修改

问题描述

考虑以下验证primary_email字段的 sqlalchemy 模型:

from sqlalchemy import Column, String
from sqlalchemy.orm import validates
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.dialects import postgresql
from sqlalchemy.ext.mutable import MutableList

Base = declarative_base()

class Test(Base):
    
    id = Column(Integer, primary_key=True)
    primary_email = Column(String(128))

    @validates('primary_email')
    def valid_email(self, key, value):
        if not '@' in value:
            raise ValueError(f"Invalid {key}: '{value}'")
        return value
        
    def __init__(self, email):
        primary_email = email 

它按预期工作,但现在我想添加另一列

secondary_email = Column(MutableList.as_mutable(postgresql.ARRAY(String(128))))

如何在secondary_email.append(email)通话中执行验证?

当我添加'secondary_email'validates装饰器时,它只会在分配操作上触发,例如

self.secondary_email = ['example@me.com']

我相信这是可以通过自定义类实现的,但我想知道是否有更简单、更通用的解决方案?

标签: pythonsqlalchemy

解决方案


推荐阅读