2010-01-26 2 views
31

SQLAlchemy에서 오류를 어떻게 처리합니까? 나는 상대적으로 SQLAlchemy에 익숙하지 않고 아직 알지 못한다.SQLAlchemy의 오류 처리

은 내가

status = db.query("INSERT INTO users ...") 
if (!status): 
    raise Error, db.error 

등의 작업을 수행 할 것 SQLAlchemy도를 사용하기 전에하지만 지금은 SQLAlchemy의 코딩 그리고 난

user = User('Boda Cydo') 
session.add(user) 
session.commit() 

오류가 전혀 확인되지 같은 일을!

오류 검사를 전혀하지 않고이 코딩 스타일을 좋아하지 않습니다.

SQLAlchemy에서 오류를 확인하고 처리하는 방법에 대한 조언을 구하십시오!

감사합니다. Boda Cydo. 오류에 예외가 발생합니다

+0

더 말해 줄 수 sqlalchemy.org http://www.sqlalchemy.org/trac/wiki/UsageRecipes/UniqueConstraintExceptionHandling –

답변

54

귀하의 예는 말한다 : 쿼리에 대한 몇 가지 오류가 있다면 보인다

status = db.query("INSERT INTO users ...") 
if (!status): 
    raise Error, db.error 

가 (당신이 예외를 발생하려는 것을 의미하는 raise Error, db.error). 그러나 sqlalchemy 이미 당신을 위해 -

user = User('Boda Cydo') 
session.add(user) 
session.commit() 

그냥 동일합니다. check-and-raise 부분은 이미 SQLAlchemy 안에 있습니다. 올바르지 않거나 충돌 함수 인수가 공급되는 경우에 발생 -

  • ArgumentError는 :

    • sqlalchemy.exc : 여기

      help(sqlalchemy.exc)help(sqlalchemy.orm.exc)에서 촬영 자체를 발생시킬 수 SQLAlchemy의 오류의리스트이다. 이 오류는 일반적으로 생성 시간 상태 오류에 해당합니다. 데이터베이스 동작의 실행이 실패 할 경우에 발생 -
    • CircularDependencyError - 순환 종속성
    • CompileError
    • 검출 될 때 위상 정렬 제기는 - 에러
    • ConcurrentModificationError
    • DBAPIError는 SQL 컴파일 동안 발생하면 발생. SQL 문 실행 중에 오류 올리기 작업이 발생한 경우 해당 문과 해당 매개 변수는 에서 statementparams 특성의 예외 개체에서 사용할 수 있습니다. 랩 된 예외 객체는 orig 속성에서 사용할 수 있습니다. 해당 유형 및 속성은 DB-API 구현에 따라 다릅니다.
    • DataError DB-API DataError을 래핑합니다.
    • DatabaseError - DB-API DatabaseError을 래핑합니다.
    • DisconnectionError - 연결이 원시 DB-API 연결에서 감지되었습니다. 을 PoolListener으로 올려야 호스트 풀에서 강제로 연결이 끊어집니다.
    • FlushError
    • IdentifierError은 - 스키마 이름이 최대 문자 제한
    • IntegrityError 넘어 경우에 발생합니다 - DB를-API IntegrityError 랩합니다.
    • InterfaceError - DB-API InterfaceError을 래핑합니다.
    • InternalError - DB-API InternalError을 래핑합니다.
    • InvalidRequestError - SQLAlchemy는 할 수없는 일을하도록 요청 받았습니다. 이 오류는 일반적으로 런타임 상태 오류에 해당합니다.
    • NoReferenceError - 참조 번호가 ForeignKey에 의해 발생하여 참조를 확인할 수 없음을 나타냅니다.
    • NoReferencedColumnError - Column을 찾을 수없는 경우 ForeignKey으로 올립니다.
    • NoReferencedTableError - Table을 찾을 수없는 경우 ForeignKey으로 올립니다.
    • NoSuchColumnError - 존재하지 않는 열은 RowProxy에서 요청됩니다.
    • NoSuchTableError - 테이블이 존재하지 않거나 연결에 표시되지 않습니다.
    • NotSupportedError - DB-API NotSupportedError을 래핑합니다.
    • OperationalError - DB-API OperationalError을 래핑합니다.
    • ProgrammingError - DB-API ProgrammingError을 래핑합니다.
    • SADeprecation 경고 - 더 이상 사용되지 않는 API 사용에 대해 한 번 발행됩니다.
    • SAPendingDeprecation 경고 - 사용 중단 된 API 사용량에 대해 한 번 발행됩니다.
    • SAWarning - 런타임에 발행됩니다.
    • SQLAlchemyError - 일반 오류 클래스.
    • SQLError - 데이터베이스 작업의 실행이 실패 할 때 발생합니다.
    • TimeoutError - 연결 풀에서 연결 풀이 시간 초과되면 발생합니다.
    • UnboundExecutionError - 데이터베이스를 실행하지 않고 SQL을 실행하려고 시도했습니다.
    • UnmappedColumnError
  • sqlalchemy.orm.exc
  • :
    • ConcurrentModificationError - 행은 작업 단위의 외부에서 수정되었습니다.
    • FlushError - flush() 중에 잘못된 조건이 감지되었습니다.
    • MultipleResultsFound - 단일 데이터베이스 결과가 필요했지만 둘 이상이 발견되었습니다.
    • NoResultFound - 데이터베이스 결과가 필요했지만 아무 것도 발견되지 않았습니다.
    • ObjectDeletedError - refresh() 작업이 개체의 행을 다시 검색하지 못했습니다.
    • UnmappedClassError - 알 수없는 클래스에 대해 매핑 작업을 요청했습니다.
    • UnmappedColumnError - 알 수없는 열에 대해 매핑 작업을 요청했습니다.
    • UnmappedError - TODO
    • UnmappedInstanceError - 알 수없는 인스턴스에 대해 매핑 작업을 요청했습니다.
2

SQLAlchemy의 ....

+0

의 예를 살펴? – bodacydo

+0

예외는 두 개의 다른 모듈 (sqlalchemy.exc 및 sqlalchemy.orm.exc)에 있습니다. 오류가 발생하면 예외가 자동으로 발생합니다. 예를 들어 직접 작성해야하는 코드와 달리 ... – tholo