나는 웹 응용 프로그램을 만들기 위해 Flask와 flask-SQLAlchemy 확장을 사용하고 모델 선언에 unique=True
과 같은 필드를 추가했습니다.SQLAlchemy의 유효성 검사
class Coupon(db.Model):
username = db.Column(db.String(80), primary_key=True)
value = db.Column(db.String(80), unique=True)
is_valid = db.Column(db.Boolean)
def __init__(self, value, username):
self.value = value
self.username = username
self.is_valid = True
유효성 검사 실패시 복구하는 가장 좋은 방법은 무엇입니까? 예 :
c1 = Coupon("same_value", "foo")
db.session.add(c1)
c2 = Coupon("same_value", "bar")
db.session.add(c2)
db.session.commit() #gives an IntegrityError
이 문제를 해결하기 위해 블록을 사용해야합니까? 또는 성공하지 못했던 번역을 다루는 더 좋은 방법이 있습니다. 트랜잭션에 관한 추가 쿼리 - 세션에 객체를 계속 추가하고 session.commit
을 수행하지 않는 한 모든 것은 하나의 변환입니다. 이 try-catch
commit()
호출에 의미가있는 경우
덕분에
감사 밴 : 그래서 더 의미가
try-catch
블록에서add/flush
을 포장하고 적절하게 처리하기 위해 만들 수 있습니다. 이 메소드 호출 바로 다음에'db.session.commit()'을 할 필요가 있습니까? – Prakhar이것은 flush()가 발생하자마자 오류를 생성하고 커밋이 호출 될 때까지 기다리지 않는 데 필요한 것에 의존합니다. 그러나 추가 할 때마다 commit()을 호출하면이 작업도 가능합니다. 이 유스 케이스/트랜잭션에서 수행하는 작업의 전체 범위를 모른 채로 대답을하는 것은 어렵습니다. – van