aiida.backends.sqlalchemy package


Return a scoped session

According to SQLAlchemy docs, this returns always the same object within a thread, and a different object in a different thread. Moreover, since we update the session class upon forking, different session objects will be used.


Callback called after a fork.

Not only disposes the engine, but also recreates a new scoped session to use independent sessions in the fork.

Parameters:engine – the engine that will be used by the sessionmaker

Resets (global) engine and sessionmaker classes, to create a new one (or creates a new one from scratch if not already available)

Parameters:profile – the profile whose configuration to use to connect to the database


Simple wrapper around the alembic command line tool that first loads an AiiDA profile.

aiida.backends.sqlalchemy.manage.execute_alembic_command(command_name, **kwargs)[source]

Execute an Alembic CLI command.

  • command_name – the sub command name
  • kwargs – parameters to pass to the command
class aiida.backends.sqlalchemy.queries.SqlaQueryManager(backend)[source]

Bases: aiida.backends.general.abstractqueries.AbstractQueryManager

SQLAlchemy implementation of custom queries, for efficiency reasons

__abstractmethods__ = frozenset()
Parameters:backend (aiida.orm.implementation.sql.SqlBackend) – The AiiDA backend
__module__ = 'aiida.backends.sqlalchemy.queries'
_abc_impl = <_abc_data object>

Return a dictionary with the statistics of node creation, summarized by day, optimized for the Django backend.

Note:Days when no nodes were created are not present in the returned ctime_by_day dictionary.
Parameters:user_pk – If None (default), return statistics for all users. If user pk is specified, return only the statistics for the given user.
Returns:a dictionary as follows:
   "total": TOTAL_NUM_OF_NODES,
   "types": {TYPESTRING1: count, TYPESTRING2: count, ...},
   "ctime_by_day": {'YYYY-MMM-DD': count, ...}

where in ctime_by_day the key is a string in the format ‘YYYY-MM-DD’ and the value is an integer with the number of nodes created that day.

class aiida.backends.sqlalchemy.utils.SqlaSettingsManager[source]

Bases: aiida.backends.utils.SettingsManager

Class to get, set and delete settings from the DbSettings table.

__module__ = 'aiida.backends.sqlalchemy.utils'

Delete the setting with the given key.

Parameters:key – the key identifying the setting
Raises:~aiida.common.exceptions.NotExistent if the settings does not exist

Return the setting with the given key.

Parameters:key – the key identifying the setting
Raises:~aiida.common.exceptions.NotExistent if the settings does not exist
set(key, value, description=None)[source]

Return the settings with the given key.

  • key – the key identifying the setting
  • value – the value for the setting
  • description – optional setting description
table_name = 'db_dbsetting'

Verify that the DbSetting table actually exists.

Raises:~aiida.common.exceptions.NotExistent if the settings table does not exist

Load the database environment without checking that code and database schema versions are compatible.

This should ONLY be used internally, inside load_dbenv, and for schema migrations. DO NOT USE OTHERWISE!

Parameters:profile – instance of Profile whose database to load

Check if the version stored in the database is the same of the version of the code.

Raises:aiida.common.ConfigurationError – if the two schema versions do not match

Delete all nodes corresponding to pks in the input. :param pks_to_delete: A list, tuple or set of pks that should be deleted.

aiida.backends.sqlalchemy.utils.flag_modified(instance, key)[source]

Wrapper around sqlalchemy.orm.attributes.flag_modified to correctly dereference utils.ModelWrapper

Since SqlAlchemy 1.2.12 (and maybe earlier but not in 1.0.19) the flag_modified function will check that the key is actually present in the instance or it will except. If we pass a model instance, wrapped in the ModelWrapper the call will raise an InvalidRequestError. In this function that wraps the flag_modified of SqlAlchemy, we derefence the model instance if the passed instance is actually wrapped in the ModelWrapper.


This function returns the alembic configuration file contents by doing the necessary updates in the ‘script_location’ name. :return: The alembic configuration.


This function returns the current version of the database. :param config: The alembic configuration. :return: The version of the database.


This function returns the head of the migration scripts. :param config: The alembic configuration. :return: The version of the head.

aiida.backends.sqlalchemy.utils.get_pg_tc(links_table_name, links_table_input_field, links_table_output_field, closure_table_name, closure_table_parent_field, closure_table_child_field)[source]

Return the transitive closure table template


Install the transitive closure table with SqlAlchemy.


Load the database environment and ensure that the code and database schema versions are compatible.

Parameters:profile – the string with the profile to use

Migrate the database to the latest schema version.

Parameters:config – alembic configuration to use, will use default if not provided

Unload the database environment, which boils down to destroying the current engine and session.