Redrock Postgres Documentation
Home Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

pq – libpq wrapper module

Psycopg is built around the libpq, the PostgreSQL client library, which performs most of the network communications and returns query results in C structures.

The low-level functions of the library are exposed by the objects in the psycopg.pq module.

pq module implementations

There are actually several implementations of the module, all offering the same interface. Current implementations are:

  • python: a pure-python implementation, implemented using the ctypes module. It is less performing than the others, but it doesn’t need a C compiler to install. It requires the libpq installed in the system.
  • c: a C implementation of the libpq wrapper (more precisely, implemented in Cython). It is much better performing than the python implementation, however it requires development packages installed on the client machine. It can be installed using the c extra, i.e. running pip install "psycopg[c]".
  • binary: a pre-compiled C implementation, bundled with all the required libraries. It is the easiest option to deal with, fast to install and it should require no development tool or client library, however it may be not available for every platform. You can install it using the binary extra, i.e. running pip install "psycopg[binary]".

The implementation currently used is available in the __impl__ module constant.

At import time, Psycopg 3 will try to use the best implementation available and will fail if none is usable. You can force the use of a specific implementation by exporting the env var PSYCOPG_IMPL: importing the library will fail if the requested implementation is not available:

$ PSYCOPG_IMPL=c python -c "import psycopg"
Traceback (most recent call last):
   ...
ImportError: couldn't import requested psycopg 'c' implementation: No module named 'psycopg_c'

Module content

__impl__

psycopg.pq.__impl__: str = ‘python’

The currently loaded implementation of the psycopg.pq package.Possible values include python, c, binary.The choice of implementation is automatic but can be forced setting the PSYCOPG_IMPL env var.

version()

psycopg.pq.version() → int

Return the version number of the libpq currently loaded.The number is in the same format of server_version. Certain features might not be available if the libpq library used is too old.

the PQlibVersion() function

__build_version__

psycopg.pq.__build_version__: int = 150003

The libpq version the C package was built with.A number in the same format of server_version representing the libpq used to build the speedup module (c, binary) if available.Certain features might not be available if the built version is too old.

error_message()

psycopg.pq.error_message(obj: Union[PGconn, PGresult], encoding: str = ‘utf8’) → str

Return an error message from a PGconn or PGresult.The return value is a str (unlike pq data which is usually bytes): use the connection encoding if available, otherwise the encoding parameter as a fallback for decoding. Don’t raise exceptions on decoding errors.

Objects wrapping libpq structures and functions

The PGconn class

class psycopg.pq.PGconn

Python representation of a libpq connection.

PGconn.pgconn_ptr

pgconn_ptr

The pointer to the underlying PGconn structure, as integer.

None if the connection is closed.

The value can be used to pass the structure to libpq functions which psycopg doesn’t (currently) wrap, either in C or in Python using FFI libraries such as ctypes.

PGconn.get_cancel()

get_cancel() → PGcancel

Create an object with the information needed to cancel a command.

See PQgetCancel for details.

PGconn.needs_password

needs_password

True if the connection authentication method required a password, but none was available.

See PQconnectionNeedsPassword for details.

PGconn.used_password

used_password

True if the connection authentication method used a password.

See PQconnectionUsedPassword for details.

PGconn.encrypt_password()

encrypt_password(passwd: bytes, user: bytes, algorithm: Optional[bytes] = None) → bytes

Return the encrypted form of a PostgreSQL password.

See PQencryptPasswordConn for details.

>>> enc = conn.info.encoding
>>> encrypted = conn.pgconn.encrypt_password(password.encode(enc), rolename.encode(enc))
b'SCRAM-SHA-256$4096:...

PGconn.trace()

trace(fileno: int)

Enable tracing of the client/server communication to a file stream.

See PQtrace for details.

PGconn.set_trace_flags()

set_trace_flags(flags: Trace)

Configure tracing behavior of client/server communication.

PARAMETERS:

flags – operating mode of tracing.

See PQsetTraceFlags for details.

PGconn.untrace()

untrace()

Disable tracing, previously enabled through trace().

See PQuntrace for details.

>>> conn.pgconn.trace(sys.stderr.fileno())
>>> conn.pgconn.set_trace_flags(pq.Trace.SUPPRESS_TIMESTAMPS | pq.Trace.REGRESS_MODE)
>>> conn.execute("select now()")
F       13      Parse    "" "BEGIN" 0
F       14      Bind     "" "" 0 0 1 0
F       6       Describe         P ""
F       9       Execute  "" 0
F       4       Sync
B       4       ParseComplete
B       4       BindComplete
B       4       NoData
B       10      CommandComplete  "BEGIN"
B       5       ReadyForQuery    T
F       17      Query    "select now()"
B       28      RowDescription   1 "now" NNNN 0 NNNN 8 -1 0
B       39      DataRow  1 29 '2022-09-14 14:12:16.648035+02'
B       13      CommandComplete  "SELECT 1"
B       5       ReadyForQuery    T
<psycopg.Cursor [TUPLES_OK] [INTRANS] (database=postgres) at 0x7f18a18ba040>
>>> conn.pgconn.untrace()

The PGresult class

class psycopg.pq.PGresult

Python representation of a libpq result.

PGresult.pgresult_ptr

pgresult_ptr

The pointer to the underlying PGresult structure, as integer.

None if the result was cleared.

The value can be used to pass the structure to libpq functions which psycopg doesn’t (currently) wrap, either in C or in Python using FFI libraries such as ctypes.

The Conninfo class

class psycopg.pq.Conninfo

Utility object to manipulate connection strings.

The Escaping class

class psycopg.pq.Escaping(conn: Optional[PGconn] = None)

Utility object to escape strings for SQL interpolation.

The PGcancel class

class psycopg.pq.PGcancel

Token to cancel the current operation on a connection.

Created by PGconn.get_cancel().

PGcancel.free()

free()

Free the data structure created by PQgetCancel().

Automatically invoked by __del__().

See PQfreeCancel() for details.

PGcancel.cancel()

cancel()

Requests that the server abandon processing of the current command.

See PQcancel() for details.

Enumerations

The ConnStatus class

class psycopg.pq.ConnStatus(value)

Current status of the connection.

There are other values in this enum, but only OK and BAD are seen after a connection has been established. Other statuses might only be seen during the connection phase and are considered internal.

PQstatus() returns this value.

ConnStatus.OK

OK = 0

ConnStatus.BAD

BAD = 1

The PollingStatus class

class psycopg.pq.PollingStatus(value)

The status of the socket during a connection.

If READING or WRITING you may select before polling again.

PQconnectPoll for a description of these states.

FAILED = 0

READING = 1

WRITING = 2

OK = 3

The TransactionStatus class

class psycopg.pq.TransactionStatus(value)

The transaction status of a connection.

PQtransactionStatus for a description of these states.

TransactionStatus.IDLE

IDLE = 0

TransactionStatus.ACTIVE

ACTIVE = 1

TransactionStatus.INTRANS

INTRANS = 2

TransactionStatus.INERROR

INERROR = 3

TransactionStatus.UNKNOWN

UNKNOWN = 4

The ExecStatus class

class psycopg.pq.ExecStatus(value)

The status of a command.

PQresultStatus for a description of these states.

EMPTY_QUERY = 0

COMMAND_OK = 1

TUPLES_OK = 2

COPY_OUT = 3

COPY_IN = 4

BAD_RESPONSE = 5

NONFATAL_ERROR = 6

FATAL_ERROR = 7

COPY_BOTH = 8

SINGLE_TUPLE = 9

PIPELINE_SYNC = 10

PIPELINE_ABORTED = 11

The PipelineStatus class

class psycopg.pq.PipelineStatus(value)

Pipeline mode status of the libpq connection.

PQpipelineStatus for a description of these states.

OFF = 0

ON = 1

ABORTED = 2

The Format class

class psycopg.pq.Format(value)

Enum representing the format of a query argument or return value.

These values are only the ones managed by the libpq. psycopg may also support automatically-chosen values: see psycopg.adapt.PyFormat.

Format.TEXT

TEXT = 0

Format.BINARY

BINARY = 1

The DiagnosticField class

class psycopg.pq.DiagnosticField(value)

Fields in an error report.

Available attributes:

SEVERITY

SEVERITY_NONLOCALIZED

SQLSTATE

MESSAGE_PRIMARY

MESSAGE_DETAIL

MESSAGE_HINT

STATEMENT_POSITION

INTERNAL_POSITION

INTERNAL_QUERY

CONTEXT

SCHEMA_NAME

TABLE_NAME

COLUMN_NAME

DATATYPE_NAME

CONSTRAINT_NAME

SOURCE_FILE

SOURCE_LINE

SOURCE_FUNCTION

PQresultErrorField for a description of these values.

The Ping class

class psycopg.pq.Ping(value)

Response from a ping attempt.

PQpingParams for a description of these values.

OK = 0

REJECT = 1

NO_RESPONSE = 2

NO_ATTEMPT = 3

The Trace class

class psycopg.pq.Trace(value)

Enum to control tracing of the client/server communication.

PQsetTraceFlags for a description of these values.

SUPPRESS_TIMESTAMPS = 1

REGRESS_MODE = 2