【问题标题】:validation when updating a sqlalchemy orm is not working更新 sqlalchemy orm 时的验证不起作用
【发布时间】:2022-05-05 03:00:20
【问题描述】:

我有这门课:

class User(base):
    __tablename__='User'
    name = Column(.......

    def __init__(self, name):
        self.name = name

    @validates('name')
    def validate_name(self, key, name):
        if blah blah blah:
            return name
        else:
            raise exception.....

创建一个新用户并将他存储在数据库中...

if __name__ == '__main__':
    user = User('foo')
    session.add(user)
    session.commit() #validation works here

更新用户时:

if __name__ == '__main__':
    user = session.query(User).filter_by(name=='foo').first()
    user.name = 'bar'
    session.add(user)
    session.commit() #validation not working here

存储新用户时,验证有效 但是在更新现有用户时,验证不起作用

问:如何在使用@validates 更新其值时验证表列?

谢谢:)

【问题讨论】:

  • 对我有用 - 如果没有适当的验证功能,这个问题是不可重现的,所以应该关闭这个问题。

标签: python sqlalchemy flask-sqlalchemy


【解决方案1】:

sqlalchemy.orm.validates 正常工作,并在插入或更新时启动。

class Account(Base):
   # ...rest
   password = Column('password', String(50))

   @validates('password')
   def hash_password(self, key, val):
      salt = bcrypt.gensalt()
      encodedpw = val.encode()
      hashedpw = bcrypt.hashpw(encodedpw, salt)
      return hashedpw.decode()

以下是我更新Account的方法

acc db_session.get(Account, '<account_id>')
acc.password = '<new_passw>'
db_session.commit()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 2022-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多