Other top-level objects

Connection information

class psycopg.ConnectionInfo

Allow access to information about the connection.

The object is usually returned by Connection.info.

dsn

Return the connection string to connect to the database.

The string contains all the parameters set to a non-default value, which might come either from the connection string and parameters passed to connect() or from environment variables. The password is never returned (you can read it using the password attribute).

Note

The get_parameters() method returns the same information as a dict.

status

The status of the connection. See :pq:`PQstatus()`.

The status can be one of a number of values. However, only two of these are seen outside of an asynchronous connection procedure: OK and BAD. A good connection to the database has the status OK. Ordinarily, an OK status will remain so until Connection.close(), but a communications failure might result in the status changing to BAD prematurely.

transaction_status

The current in-transaction status of the session. See :pq:`PQtransactionStatus()`.

The status can be IDLE (currently idle), ACTIVE (a command is in progress), INTRANS (idle, in a valid transaction block), or INERROR (idle, in a failed transaction block). UNKNOWN is reported if the connection is bad. ACTIVE is reported only when a query has been sent to the server and not yet completed.

pipeline_status

The current pipeline status of the client. See :pq:`PQpipelineStatus()`.

backend_pid

The process ID (PID) of the backend process handling this connection. See :pq:`PQbackendPID()`.

vendor

A string representing the database vendor connected to.

Normally it is PostgreSQL; it may be different if connected to a different database.

Added in version 3.1.

server_version

An integer representing the server version. See :pq:`PQserverVersion()`.

The number is formed by converting the major, minor, and revision numbers into two-decimal-digit numbers and appending them together. Starting from PostgreSQL 10 the minor version was dropped, so the second group of digits is always 00. For example, version 9.3.5 is returned as 90305, version 10.2 as 100002.

error_message

The error message most recently generated by an operation on the connection. See :pq:`PQerrorMessage()`.

get_parameters() dict[str, str]

Return the connection parameters values.

Return all the parameters set to a non-default value, which might come either from the connection string and parameters passed to connect() or from environment variables. The password is never returned (you can read it using the password attribute).

Note

The dsn attribute returns the same information in the form as a string.

timezone

The Python timezone info of the connection’s timezone.

>>> conn.info.timezone
zoneinfo.ZoneInfo(key='Europe/Rome')
host

The server host name of the active connection. See :pq:`PQhost()`.

This can be a host name, an IP address, or a directory path if the connection is via Unix socket. (The path case can be distinguished because it will always be an absolute path, beginning with /.)

hostaddr

The server IP address of the connection. See :pq:`PQhostaddr()`.

Only available if the libpq used is from PostgreSQL 12 or newer. Raise NotSupportedError otherwise. You can use the has_hostaddr capability to check for support.

port

The port of the active connection. See :pq:`PQport()`.

dbname

The database name of the connection. See :pq:`PQdb()`.

user

The user name of the connection. See :pq:`PQuser()`.

password

The password of the connection. See :pq:`PQpass()`.

options

The command-line options passed in the connection request. See :pq:`PQoptions`.

parameter_status(param_name: str) str | None

Return a parameter setting of the connection.

Return None is the parameter is unknown.

Example of parameters are server_version, standard_conforming_strings… See :pq:`PQparameterStatus()` for all the available parameters.

encoding

The Python codec name of the connection’s client encoding.

The value returned is always normalized to the Python codec name:

conn.execute("SET client_encoding TO LATIN9")
conn.info.encoding
'iso8859-15'

A few PostgreSQL encodings are not available in Python and cannot be selected (currently EUC_TW, MULE_INTERNAL). The PostgreSQL SQL_ASCII encoding has the special meaning of “no encoding”: see Strings adaptation for details.

Libpq capabilities information

class psycopg.Capabilities

An object to check if a feature is supported by the libpq available on the client.

An instance of this object is normally exposed by the module as the object psycopg.capabilities.

Every feature check is implemented by an has_SOMETHING() method. All the methods return a boolean value stating if the capability is supported, which can be used by a program to degrade gracefully:

if psycopg.capabilities.has_pipeline()
    with conn.pipeline():
        operations(conn)
else:
    logger.warning("slower")
    operations(conn)

If check is True, and the capability is not supported, raise a NotSupportedError instead of returning False, explaining why the feature is not supported. This allows to make a check at import time, crashing early and with a clear description of the problem.

>>> import psycopg
>>> psycopg.capabilities.has_pipeline(check=True)
Traceback (most recent call last):
  ...
psycopg.NotSupportedError: the feature 'Connection.pipeline()' is not available:
    the client libpq version (imported from system libraries) is 13.4; the
    feature requires libpq version 14.0 or newer

Added in version 3.2.

has_encrypt_password(check: bool = False) bool

Check if the PGconn.encrypt_password() method is implemented.

The feature requires libpq 10.0 and greater.

has_hostaddr(check: bool = False) bool

Check if the ConnectionInfo.hostaddr attribute is implemented.

The feature requires libpq 12.0 and greater.

has_pipeline(check: bool = False) bool

Check if the pipeline mode is supported.

The feature requires libpq 14.0 and greater.

has_set_trace_flags(check: bool = False) bool

Check if the pq.PGconn.set_trace_flags() method is implemented.

The feature requires libpq 14.0 and greater.

has_cancel_safe(check: bool = False) bool

Check if the Connection.cancel_safe() method is implemented.

The feature requires libpq 17.0 and greater.

Note

The cancel_safe() method is implemented anyway, but it will use the legacy :pq:`PQcancel` implementation.

has_stream_chunked(check: bool = False) bool

Check if Cursor.stream() can handle a size parameter value greater than 1 to retrieve results by chunks.

The feature requires libpq 17.0 and greater.

has_send_close_prepared(check: bool = False) bool

Check if the pq.PGconn.send_closed_prepared() method is implemented.

The feature requires libpq 17.0 and greater.

The description Column object

class psycopg.Column

An object describing a column of data from a database result, as described by the DBAPI, so it can also be unpacked as a 7-items tuple.

The object is returned by Cursor.description.

name

The name of the column.

type_code

The numeric OID of the column.

type_display

A pretty representation of the column type.

It is composed by the type name, followed by eventual modifiers and brackets to signify arrays, e.g. text, varchar(42), date[].

Added in version 3.2.

display_size

The field size, for string types such as varchar(n).

internal_size

The internal field size for fixed-size types, None otherwise.

precision

The number of digits for fixed precision types.

scale

The number of digits after the decimal point if available.

Notifications

class psycopg.Notify

An asynchronous notification received from the database.

The object is usually returned by Connection.notifies().

channel: str

The name of the channel on which the notification was received.

payload: str

The message attached to the notification.

pid: int

The PID of the backend process which sent the notification.