Databases

The database module defines Database.

Database

A Database is initialized from a CatDbConnection object (a specialized class derived from DbConnection). It consists of one or two Dicts. A Dicts object holds various dictionary objects derived from DbObjectDict, e.g., SchemaDict, ClassDict, and ColumnDict. The key for each dictionary is a Python tuple (or a single value in the case of SchemaDict). For example, the ClassDict dictionary is indexed by (schema name, table name). In addition, object instances in each dictionary are linked to related objects in other dictionaries, e.g., columns are linked to the tables where they belong.

The db Dicts object –always present– defines the database schemas, including their tables and other objects, by querying the system catalogs. The ndb Dicts object defines the schemas based on the input_map supplied to the diff_map() method.

The to_map() method returns and the diff_map() method takes as input, a dictionary as shown below. It uses ‘schema schema_name‘ as the key for each schema. The value corresponding to each ‘schema schema_name‘ is another dictionary using ‘sequences’, ‘tables’, etc., as keys and more dictionaries as values. For example:

{'schema public':
    {'sequence seq1': { ... },
     'sequence seq2': { ... },
     'table t1': { ... },
     'table t2': { ... },
     'table t3': { ... },
     'view v1': { ... }
    },
 'schema s1': { ... },
 'schema s2': { ... }
}

Refer to Sequence, Table and View for details on the lower level dictionaries.

class pyrseas.database.Database(config)

A database definition, from its catalogs and/or a YAML spec.

Methods from_catalog() and from_map() are for internal use. Methods to_map() and diff_map() are the external API.

Database.from_catalog()

Populate the database objects by querying the catalogs

The db holder is populated by various DbObjectDict-derived classes by querying the catalogs. The objects in the dictionary are then linked to related objects, e.g., columns are linked to the tables they belong.

Database.from_map(input_map, langs=None)

Populate the new database objects from the input map

Parameters:
  • input_map – a YAML map defining the new database
  • langs – list of language templates

The ndb holder is populated by various DbObjectDict-derived classes by traversing the YAML input map. The objects in the dictionary are then linked to related objects, e.g., columns are linked to the tables they belong.

Database.map_from_dir()

Read the database maps starting from metadata directory

Returns:dictionary
Database.to_map()

Convert the db maps to a single hierarchy suitable for YAML

Returns:a YAML-suitable dictionary (without Python objects)
Database.diff_map(input_map)

Generate SQL to transform an existing database

Parameters:input_map – a YAML map defining the new database
Returns:list of SQL statements

Compares the existing database definition, as fetched from the catalogs, to the input YAML map and generates SQL statements to transform the database into the one represented by the input.