2010-01-26 25 views
31

¿Cómo maneja los errores en SQLAlchemy? Soy relativamente nuevo en SQLAlchemy y aún no lo sé.Error al manejar en SQLAlchemy

Antes solía SQLAlchemy, me gustaría hacer cosas como

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

pero ahora estoy de codificación en SQLAlchemy y hago cosas como la comprobación

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

Sin error absoluto!

No me gusta este estilo de codificación sin verificar ningún error.

Por favor, ¡infórmenos sobre cómo verificar y manejar los errores en SQLAlchemy!

Atentamente, Boda Cydo.

+0

Tome un vistazo a ejemplo a sqlalchemy.org http://www.sqlalchemy.org/trac/wiki/UsageRecipes/UniqueConstraintExceptionHandling –

Respuesta

54

Su ejemplo dice:

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

Eso parece significar que desea lanzar una excepción si hay algún error en la consulta (con raise Error, db.error). Sin embargo sqlalchemy ya lo hace por usted, entonces

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

Es lo mismo. La parte de comprobar y subir ya está dentro de SQLAlchemy.

Aquí es una lista de los errores sqlalchemy sí mismo puede levantar, tomadas de help(sqlalchemy.exc) y help(sqlalchemy.orm.exc):

  • sqlalchemy.exc:
    • ArgumentError - levantado cuando se suministra un argumento de función no válido o en conflicto. Este error generalmente corresponde a errores de estado de tiempo de construcción.
    • CircularDependencyError - Criado por tipo topológicos cuando se detecta una dependencia circular
    • CompileError - Se genera cuando se produce un error durante la compilación de SQL
    • ConcurrentModificationError
    • DBAPIError - Se genera cuando la ejecución de una operación de base de datos falla. Si la operación de generación de errores se produjo en la ejecución de una instrucción SQL , esa declaración y sus parámetros estarán disponibles en el objeto de excepción en los atributos statement y params. El objeto de excepción envuelto está disponible en el atributo orig. Su tipo y propiedades son específicas de la implementación DB-API.
    • DataError Encapsula una DB-API DataError.
    • DatabaseError - Vuelve a una DB-API DatabaseError.
    • DisconnectionError - Se detecta una desconexión en una conexión raw DB-API. se generará mediante un PoolListener para que el grupo de hosts fuerce una desconexión.
    • FlushError
    • IdentifierError - levantado cuando un nombre de esquema está más allá del límite de caracteres máximo
    • IntegrityError - se ajusta un DB-API IntegrityError.
    • InterfaceError - Vuelve a una DB-API InterfaceError.
    • InternalError - Vuelve a una DB-API InternalError.
    • InvalidRequestError - Se le pidió a SQLAlchemy que hiciera algo que no puede hacer. Este error generalmente corresponde a los errores de estado de tiempo de ejecución.
    • NoReferenceError - Recaudado por ForeignKey para indicar que no se puede resolver una referencia.
    • NoReferencedColumnError - Levantado por ForeignKey cuando no se puede ubicar el referido Column.
    • NoReferencedTableError - Levantado por ForeignKey cuando no se puede ubicar el referido Table.
    • NoSuchColumnError - Se solicita una columna inexistente de RowProxy.
    • NoSuchTableError - La tabla no existe o no es visible para una conexión.
    • NotSupportedError - Vuelve a una DB-API NotSupportedError.
    • OperationalError - Vuelve a una DB-API OperationalError.
    • ProgrammingError - Vuelve a una DB-API ProgrammingError.
    • SADeprecationWarning: se emite una vez por uso de una API obsoleta.
    • SAPendingDeprecationWarning: se emite una vez por uso de una API obsoleta.
    • SAAdvertencia - Publicado en tiempo de ejecución.
    • SQLAlchemyError - Clase de error genérico.
    • SQLError - Se produce cuando falla la ejecución de una operación de base de datos.
    • TimeoutError - Se produce cuando un grupo de conexión agota el tiempo para obtener una conexión.
    • UnboundExecutionError - Se intentó SQL sin una conexión de base de datos para ejecutarlo.
    • UnmappedColumnError
  • sqlalchemy.orm.exc:
    • ConcurrentModificationError - Las filas se han modificado fuera de la unidad de trabajo.
    • FlushError - Se detectó una condición inválida durante el vaciado().
    • MultipleResultsFound: se requirió un único resultado de base de datos, pero se encontraron más de uno.
    • NoResultFound: se solicitó un resultado de base de datos pero no se encontró ninguno.
    • ObjectDeletedError - Una operación de actualización() no pudo volver a recuperar la fila de un objeto.
    • UnmappedClassError - Se solicitó una operación de asignación para una clase desconocida.
    • UnmappedColumnError - Se solicitó la operación de asignación en una columna desconocida.
    • UnmappedError - TODO
    • UnmappedInstanceError - Se solicitó una operación de asignación para una instancia desconocida.
2

SQLAlchemy lanzará una excepción en caso de error ....

+0

¿Se puede decir más? – bodacydo

+0

Las excepciones se encuentran en dos módulos diferentes: sqlalchemy.exc y sqlalchemy.orm.exc. Las excepciones se generan automáticamente cuando se produce un error, a diferencia del código de su ejemplo en el que debe hacerlo usted mismo ... – tholo

Cuestiones relacionadas