# TypeCache – The internal cache for database types

class pgdb.TypeCache

Added in version 5.0.

The internal `TypeCache` of PyGreSQL is not part of the DB-API 2 standard, but is documented here in case you need full control and understanding of the internal handling of database types.

The TypeCache is essentially a dictionary mapping PostgreSQL internal type names and type OIDs to DB-API 2 “type codes” (which are also returned as the type_code field of the `Cursor.description` attribute).

These type codes are strings which are equal to the PostgreSQL internal type name, but they are also carrying additional information about the associated PostgreSQL type in the following attributes:

> - oid – the OID of the type

> - len – the internal size

> - type – `'b'` = base, `'c'` = composite, …

> - category – `'A'` = Array, `'B'` = Boolean, …

> - delim – delimiter to be used when parsing arrays

> - relid – the table OID for composite types

For details, see the PostgreSQL documentation on pg_type.

In addition to the dictionary methods, the `TypeCache` provides the following methods:

TypeCache.get_fields(typ)

  Get the names and types of the fields of composite types

  Parameters:

    typ (str or int) – PostgreSQL type name or OID of a composite type

  Returns:

    a list of pairs of field names and types

  Return type:

    list

TypeCache.get_typecast(typ)

  Get the cast function for the given database type

  Parameters:

    typ (str) – PostgreSQL type name or type code

  Returns:

    the typecast function for the specified type

  Return type:

    function or None

TypeCache.set_typecast(typ, cast)

  Set a typecast function for the given database type(s)

  Parameters:

    - typ (str or int) – PostgreSQL type name or type code, or list of such

    - cast – the typecast function to be set for the specified type(s)

The typecast function must take one string object as argument and return a Python object into which the PostgreSQL type shall be casted. If the function takes another parameter named connection, then the current database connection will also be passed to the typecast function. This may sometimes be necessary to look up certain database settings.

TypeCache.reset_typecast([typ])

  Reset the typecasts for the specified (or all) type(s) to their defaults

  Parameters:

    typ (str, list or None) – PostgreSQL type name or type code, or list of such, or None to reset all typecast functions

TypeCache.typecast(value, typ)

  Cast the given value according to the given database type

  Parameters:

    typ (str) – PostgreSQL type name or type code

  Returns:

    the casted value

Note

Note that the `TypeCache` is always bound to a database connection. You can also get, set and reset typecast functions on a global level using the functions `pgdb.get_typecast()`, `pgdb.set_typecast()` and `pgdb.reset_typecast()`. If you do this, the current database connections will continue to use their already cached typecast functions unless call the `TypeCache.reset_typecast()` method on the `Connection.type_cache` objects of the running connections.