아마
방법이 많이 있지만, 하나는 @validates을 사용하는 것입니다 :
from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class A(Base):
__tablename__ = 'a'
id = Column(Integer, primary_key=True)
readonly1 = Column(String)
readonly2 = Column(String)
@validates('readonly1', 'readonly2')
def _write_once(self, key, value):
existing = getattr(self, key)
if existing is not None:
raise ValueError("Field '%s' is write-once" % key)
return value
a1 = A()
a1.readonly1 = 'foo'
assert a1.readonly1 == 'foo'
try:
a1.readonly1 = 'bar'
assert False
except ValueError, e:
print e
e = create_engine("sqlite://")
Base.metadata.create_all(e)
s = Session(e)
s.add(A(readonly1='foo', readonly2='bar'))
s.commit()
a2 = s.query(A).first()
try:
a2.readonly2 = 'bar2'
assert False
except ValueError, e:
print e
@validates 당신이 그것을 설정하는 다른 방법을 구축하는 것을 사용할 수 attribute events를 사용하여 단지 속기이다.
감사합니다. 곧 살펴 보겠습니다. – saabeilin
속성 이벤트 url이 더 이상 정확하지 않습니다. +1해도 –