2010-01-26 44 views
31

Bạn xử lý các lỗi trong SQLAlchemy như thế nào? Tôi khá mới đối với SQLAlchemy và chưa biết.Xử lý lỗi trong SQLAlchemy

Trước khi tôi sử dụng SQLAlchemy, tôi sẽ làm những việc như

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

Nhưng bây giờ tôi đang mã hóa trong SQLAlchemy và tôi làm những việc như kiểm tra

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

Không có lỗi gì!

Tôi không thích kiểu mã hóa này mà không kiểm tra lỗi.

Hãy tư vấn về cách kiểm tra và xử lý lỗi trong SQLAlchemy!

Trân trọng, Boda Cydo.

+0

Hãy xem ví dụ tại sqlalchemy.org http://www.sqlalchemy.org/trac/wiki/UsageRecipes/UniqueConstraintExceptionHandling –

Trả lời

54

dụ bạn nói:

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

Đó dường như có nghĩa rằng bạn muốn nâng cao một ngoại lệ nếu có một số lỗi trên các truy vấn (với raise Error, db.error). Tuy nhiên sqlalchemy đã làm điều đó cho bạn - do đó,

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

Chỉ giống nhau. Phần kiểm tra và nâng cao đã nằm trong SQLAlchemy.

Dưới đây là danh sách các lỗi SQLAlchemy chính nó có thể nâng cao, lấy từ help(sqlalchemy.exc)help(sqlalchemy.orm.exc):

  • sqlalchemy.exc:
    • ArgumentError - Lớn lên khi một cuộc tranh cãi chức năng không hợp lệ hoặc mâu thuẫn được cung cấp. Lỗi này thường tương ứng với lỗi trạng thái thời gian xây dựng.
    • CircularDependencyError - Lớn lên bằng các loại topo khi một phụ thuộc vòng tròn được phát hiện
    • CompileError - Lớn lên khi một lỗi xảy ra trong quá trình biên soạn SQL
    • ConcurrentModificationError
    • DBAPIError - Lớn lên khi thực hiện một thao tác cơ sở dữ liệu bị lỗi. Nếu hoạt động tăng lỗi xảy ra khi thực hiện câu lệnh SQL , tuyên bố đó và các tham số của nó sẽ có sẵn trên đối tượng ngoại lệ trong thuộc tính statementparams. Đối tượng ngoại lệ được bao bọc có sẵn trong thuộc tính orig. Loại và đặc tính của nó là cài đặt DB-API cụ thể.
    • DataError Kết thúc tốt đẹp một DB-API DataError.
    • DatabaseError - Kết thúc tốt đẹp một DB-API DatabaseError.
    • DisconnectionError - Ngắt kết nối được phát hiện trên kết nối DB-API thô. được nâng lên bởi PoolListener để nhóm lưu trữ buộc phải ngắt kết nối.
    • FlushError
    • IdentifierError - Lớn lên khi một tên schema là vượt quá giới hạn ký tự tối đa
    • IntegrityError - Wraps một DB-API IntegrityError.
    • InterfaceError - Kết thúc tốt đẹp một DB-API InterfaceError.
    • InternalError - Kết thúc tốt đẹp một DB-API InternalError.
    • InvalidRequestError - SQLAlchemy được yêu cầu làm điều gì đó không thể thực hiện được. Lỗi này thường tương ứng với lỗi trạng thái thời gian chạy.
    • NoReferenceError - Được tăng lên bởi ForeignKey để cho biết không thể giải quyết tham chiếu.
    • NoReferencedColumnError - Tăng lên ForeignKey khi không thể định vị Column được giới thiệu.
    • NoReferencedTableError - Được tăng lên ForeignKey khi không được định vị Table.
    • NoSuchColumnError - Cột không tồn tại được yêu cầu từ RowProxy.
    • NoSuchTableError - Bảng không tồn tại hoặc không hiển thị với kết nối.
    • NotSupportedError - Kết thúc tốt đẹp một DB-API NotSupportedError.
    • OperationalError - Kết thúc tốt đẹp một DB-API OperationalError.
    • ProgrammingError - Kết thúc tốt đẹp một DB-API ProgrammingError.
    • SADeprecationCảnh báo - Được phát hành một lần cho mỗi lần sử dụng API không dùng nữa.
    • SAPendingDeprecationWarning - Được phát hành một lần cho mỗi lần sử dụng API không dùng nữa.
    • SAWarning - Được phát hành khi chạy.
    • SQLAlchemyError - Lớp lỗi chung.
    • SQLError - Tăng lên khi thực hiện thao tác cơ sở dữ liệu không thành công.
    • TimeoutError - Tăng lên khi hồ bơi kết nối hết thời gian chờ kết nối.
    • UnboundExecutionError - SQL đã được thử mà không có kết nối cơ sở dữ liệu để thực thi nó.
    • UnmappedColumnError
  • sqlalchemy.orm.exc:
    • ConcurrentModificationError - Hàng đã được sửa đổi bên ngoài của các đơn vị làm việc.
    • FlushError - Đã phát hiện tình trạng không hợp lệ trong khi xả().
    • MultipleResultsFound - Một kết quả cơ sở dữ liệu duy nhất là bắt buộc nhưng nhiều hơn một được tìm thấy.
    • NoResultFound - Kết quả cơ sở dữ liệu là bắt buộc nhưng không tìm thấy kết quả nào.
    • ObjectDeletedError - Thao tác làm mới() không thể truy xuất lại hàng của đối tượng.
    • UnmappedClassError - Thao tác ánh xạ được yêu cầu cho một lớp không xác định.
    • UnmappedColumnError - Thao tác ánh xạ được yêu cầu trên cột không xác định.
    • UnmappedError - TODO
    • UnmappedInstanceError - Thao tác ánh xạ được yêu cầu cho một trường hợp không xác định.
2

SQLAlchemy sẽ nâng cao một ngoại lệ về lỗi ....

+0

Bạn có thể nói rõ hơn? – bodacydo

+0

Các trường hợp ngoại lệ có hai mô-đun khác nhau - sqlalchemy.exc và sqlalchemy.orm.exc. Trường hợp ngoại lệ được tự động tăng lên khi xảy ra lỗi, không giống như mã trong ví dụ của bạn, nơi bạn phải tự làm điều đó ... – tholo