mirror of
https://github.com/psycopg/psycopg2.git
synced 2024-11-26 02:43:43 +03:00
Added documentation for the errors module
This commit is contained in:
parent
61df7bdd8d
commit
5da968d6f6
2
NEWS
2
NEWS
|
@ -6,6 +6,8 @@ What's new in psycopg 2.8
|
||||||
|
|
||||||
New features:
|
New features:
|
||||||
|
|
||||||
|
- Added `~psycopg2.errors` module. Every PostgreSQL error is converted into
|
||||||
|
a specific exception class (:ticket:`#682`).
|
||||||
- Added `~psycopg2.extensions.encrypt_password()` function (:ticket:`#576`).
|
- Added `~psycopg2.extensions.encrypt_password()` function (:ticket:`#576`).
|
||||||
- `~psycopg2.extras.DictCursor` and `~psycopg2.extras.RealDictCursor` rows
|
- `~psycopg2.extras.DictCursor` and `~psycopg2.extras.RealDictCursor` rows
|
||||||
maintain columns order (:ticket:`#177`).
|
maintain columns order (:ticket:`#177`).
|
||||||
|
|
58
doc/src/errors.rst
Normal file
58
doc/src/errors.rst
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
`psycopg2.errors` -- Exception classes mapping PostgreSQL errors
|
||||||
|
================================================================
|
||||||
|
|
||||||
|
.. sectionauthor:: Daniele Varrazzo <daniele.varrazzo@gmail.com>
|
||||||
|
|
||||||
|
.. index::
|
||||||
|
single: Error; Class
|
||||||
|
|
||||||
|
.. module:: psycopg2.errors
|
||||||
|
|
||||||
|
.. versionadded:: 2.8
|
||||||
|
|
||||||
|
This module contains the classes psycopg raises upon receiving an error from
|
||||||
|
the database with a :sql:`SQLSTATE` value attached. The module is generated
|
||||||
|
from the PostgreSQL source code and includes classes for every error defined
|
||||||
|
by PostgreSQL in versions between 9.1 and 11.
|
||||||
|
|
||||||
|
Every class in the module is named after what referred as "condition name" `in
|
||||||
|
the documentation`__, converted to CamelCase: e.g. the error 22012,
|
||||||
|
``division_by_zero`` is exposed by this module as the class `!DivisionByZero`.
|
||||||
|
|
||||||
|
.. __: https://www.postgresql.org/docs/current/static/errcodes-appendix.html#ERRCODES-TABLE
|
||||||
|
|
||||||
|
Every exception class is a subclass of one of the :ref:`standard DB-API
|
||||||
|
exception <dbapi-exceptions>` and expose the `~psycopg2.Error` interface.
|
||||||
|
Each class' superclass is what used to be raised by psycopg in versions before
|
||||||
|
the introduction of this module, so everything should be compatible with
|
||||||
|
previously written code catching one the DB-API class: if your code used to
|
||||||
|
catch `!IntegrityError` to detect a duplicate entry, it will keep on working
|
||||||
|
even if a more specialised subclass such as `UniqueViolation` is raised.
|
||||||
|
|
||||||
|
The new classes allow a more idiomatic way to check and process a specific
|
||||||
|
error among the many the database may return. For instance, in order to check
|
||||||
|
that a table is locked, the following code could have been used previously:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
try:
|
||||||
|
cur.execute("LOCK TABLE mytable IN ACCESS EXCLUSIVE MODE NOWAIT")
|
||||||
|
except psycopg2.OperationalError as e:
|
||||||
|
if e.pgcode == psycopg2.errorcodes.LOCK_NOT_AVAILABLE:
|
||||||
|
locked = True
|
||||||
|
else:
|
||||||
|
raise
|
||||||
|
|
||||||
|
While this method is still available, the specialised class allows for a more
|
||||||
|
idiomatic error handler:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
try:
|
||||||
|
cur.execute("LOCK TABLE mytable IN ACCESS EXCLUSIVE MODE NOWAIT")
|
||||||
|
except psycopg2.errors.LockNotAvailable:
|
||||||
|
locked = True
|
||||||
|
|
||||||
|
For completeness, the module also exposes all the DB-API-defined classes and
|
||||||
|
:ref:`a few psycopg-specific exceptions <extension-exceptions>` previously
|
||||||
|
exposed by the `!extensions` module. One stop shop for all your mistakes...
|
|
@ -431,12 +431,19 @@ details.
|
||||||
.. index::
|
.. index::
|
||||||
single: Exceptions; Additional
|
single: Exceptions; Additional
|
||||||
|
|
||||||
|
.. _extension-exceptions:
|
||||||
|
|
||||||
Additional exceptions
|
Additional exceptions
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
The module exports a few exceptions in addition to the :ref:`standard ones
|
The module exports a few exceptions in addition to the :ref:`standard ones
|
||||||
<dbapi-exceptions>` defined by the |DBAPI|_.
|
<dbapi-exceptions>` defined by the |DBAPI|_.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
From psycopg 2.8 these error classes are also exposed by the
|
||||||
|
`psycopg2.errors` module.
|
||||||
|
|
||||||
|
|
||||||
.. exception:: QueryCanceledError
|
.. exception:: QueryCanceledError
|
||||||
|
|
||||||
(subclasses `~psycopg2.OperationalError`)
|
(subclasses `~psycopg2.OperationalError`)
|
||||||
|
|
|
@ -42,6 +42,7 @@ Psycopg 2 is both Unicode and Python 3 friendly.
|
||||||
advanced
|
advanced
|
||||||
extensions
|
extensions
|
||||||
extras
|
extras
|
||||||
|
errors
|
||||||
sql
|
sql
|
||||||
tz
|
tz
|
||||||
pool
|
pool
|
||||||
|
|
|
@ -250,13 +250,14 @@ available through the following exceptions:
|
||||||
|
|
||||||
.. extension::
|
.. extension::
|
||||||
|
|
||||||
Psycopg may raise a few other, more specialized, exceptions: currently
|
Psycopg actually raises a different exception for each :sql:`SQLSTATE`
|
||||||
`~psycopg2.extensions.QueryCanceledError` and
|
error returned by the database: the classes are available in the
|
||||||
`~psycopg2.extensions.TransactionRollbackError` are defined. These
|
`psycopg2.errors` module. Every exception class is a subclass of one of
|
||||||
exceptions are not exposed by the main `!psycopg2` module but are
|
the exception classes defined here though, so they don't need to be
|
||||||
made available by the `~psycopg2.extensions` module. All the
|
trapped specifically: trapping `!Error` or `!DatabaseError` is usually
|
||||||
additional exceptions are subclasses of standard |DBAPI| exceptions, so
|
what needed to write a generic error handler; trapping a specific error
|
||||||
trapping them specifically is not required.
|
such as `!NotNullViolation` can be useful to write specific exception
|
||||||
|
handlers.
|
||||||
|
|
||||||
|
|
||||||
This is the exception inheritance layout:
|
This is the exception inheritance layout:
|
||||||
|
@ -270,8 +271,6 @@ This is the exception inheritance layout:
|
||||||
\|__ `DatabaseError`
|
\|__ `DatabaseError`
|
||||||
\|__ `DataError`
|
\|__ `DataError`
|
||||||
\|__ `OperationalError`
|
\|__ `OperationalError`
|
||||||
\| \|__ `psycopg2.extensions.QueryCanceledError`
|
|
||||||
\| \|__ `psycopg2.extensions.TransactionRollbackError`
|
|
||||||
\|__ `IntegrityError`
|
\|__ `IntegrityError`
|
||||||
\|__ `InternalError`
|
\|__ `InternalError`
|
||||||
\|__ `ProgrammingError`
|
\|__ `ProgrammingError`
|
||||||
|
|
Loading…
Reference in New Issue
Block a user