class documentation

class MetaData(SchemaItem):

Known subclasses: sqlalchemy.sql.schema.ThreadLocalMetaData

View In Hierarchy

A collection of _schema.Table objects and their associated schema constructs.

Holds a collection of _schema.Table objects as well as an optional binding to an _engine.Engine or _engine.Connection. If bound, the _schema.Table objects in the collection and their columns may participate in implicit SQL execution.

The _schema.Table objects themselves are stored in the _schema.MetaData.tables dictionary.

_schema.MetaData is a thread-safe object for read operations. Construction of new tables within a single _schema.MetaData object, either explicitly or via reflection, may not be completely thread-safe.

See Also

:ref:`metadata_describing` - Introduction to database metadata

Method __contains__ Undocumented
Method __getstate__ Undocumented
Method __init__ Create a new MetaData object.
Method __repr__ Undocumented
Method __setstate__ Undocumented
Method ​_add​_table Undocumented
Method ​_bind​_to Bind this MetaData to an Engine, Connection, string or URL.
Method ​_remove​_table Undocumented
Method bind An _engine.Engine or _engine.Connection to which this _schema.MetaData is bound.
Method clear Clear all Table objects from this MetaData.
Method create​_all Create all tables stored in this metadata.
Method drop​_all Drop all tables stored in this metadata.
Method is​_bound True if this MetaData is bound to an Engine or Connection.
Method reflect Load all available table definitions from the database.
Method remove Remove the given Table object from this MetaData.
Class Variable __visit​_name__ Undocumented
Instance Variable ​_bind Undocumented
Instance Variable ​_fk​_memos Undocumented
Instance Variable ​_schemas Undocumented
Instance Variable ​_sequences Undocumented
Instance Variable info Info dictionary associated with the object, allowing user-defined data to be associated with this .SchemaItem.
Instance Variable naming​_convention Undocumented
Instance Variable schema Undocumented
Instance Variable tables A dictionary of _schema.Table objects keyed to their name or "table key".
Property sorted​_tables Returns a list of _schema.Table objects sorted in order of foreign key dependency.

Inherited from SchemaItem:

Method ​_init​_items Initialize the list of child items for this SchemaItem.
Method ​_schema​_item​_copy Undocumented
Class Variable ​_use​_schema​_map Undocumented
Class Variable create​_drop​_stringify​_dialect Undocumented

Inherited from SchemaEventTarget (via SchemaItem):

Method ​_set​_parent Associate with this SchemaEvent's parent object.
Method ​_set​_parent​_with​_dispatch Undocumented

Inherited from Traversible (via SchemaItem):

Method get​_children Return immediate child .visitors.Traversible elements of this .visitors.Traversible.
Method __class​_getitem__ Undocumented
def __contains__(self, table_or_key):

Undocumented

def __getstate__(self):

Undocumented

@util.deprecated_params(bind=('2.0', 'The :paramref:`_schema.MetaData.bind` argument is deprecated and will be removed in SQLAlchemy 2.0.'))
def __init__(self, bind=None, schema=None, quote_schema=None, naming_convention=None, info=None):
Create a new MetaData object.
Parameters
bindAn Engine or Connection to bind to. May also be a string or URL instance, these are passed to _sa.create_engine and this _schema.MetaData will be bound to the resulting engine.
schema

The default schema to use for the _schema.Table, .Sequence, and potentially other objects associated with this _schema.MetaData. Defaults to None.

quote​_schemaSets the quote_schema flag for those _schema.Table, .Sequence, and other objects which make usage of the local schema name.
naming​_convention

a dictionary referring to values which will establish default naming conventions for .Constraint and .Index objects, for those objects which are not given a name explicitly.

The keys of this dictionary may be:

  • a constraint or Index class, e.g. the .UniqueConstraint, _schema.ForeignKeyConstraint class, the .Index class
  • a string mnemonic for one of the known constraint classes; "fk", "pk", "ix", "ck", "uq" for foreign key, primary key, index, check, and unique constraint, respectively.
  • the string name of a user-defined "token" that can be used to define new naming tokens.

The values associated with each "constraint class" or "constraint mnemonic" key are string naming templates, such as "uq_%(table_name)s_%(column_0_name)s", which describe how the name should be composed. The values associated with user-defined "token" keys should be callables of the form fn(constraint, table), which accepts the constraint/index object and _schema.Table as arguments, returning a string result.

The built-in names are as follows, some of which may only be available for certain types of constraint:

  • %(table_name)s - the name of the _schema.Table object associated with the constraint.
  • %(referred_table_name)s - the name of the _schema.Table object associated with the referencing target of a _schema.ForeignKeyConstraint.
  • %(column_0_name)s - the name of the _schema.Column at index position "0" within the constraint.
  • %(column_0N_name)s - the name of all _schema.Column objects in order within the constraint, joined without a separator.
  • %(column_0_N_name)s - the name of all _schema.Column objects in order within the constraint, joined with an underscore as a separator.
  • %(column_0_label)s, %(column_0N_label)s, %(column_0_N_label)s - the label of either the zeroth _schema.Column or all .Columns, separated with or without an underscore
  • %(column_0_key)s, %(column_0N_key)s, %(column_0_N_key)s - the key of either the zeroth _schema.Column or all .Columns, separated with or without an underscore
  • %(referred_column_0_name)s, %(referred_column_0N_name)s %(referred_column_0_N_name)s, %(referred_column_0_key)s, %(referred_column_0N_key)s, ... column tokens which render the names/keys/labels of columns that are referenced by a _schema.ForeignKeyConstraint.
  • %(constraint_name)s - a special key that refers to the existing name given to the constraint. When this key is present, the .Constraint object's existing name will be replaced with one that is composed from template string that uses this token. When this token is present, it is required that the .Constraint is given an explicit name ahead of time.
  • user-defined: any additional token may be implemented by passing it along with a fn(constraint, table) callable to the naming_convention dictionary.
New in version 1.3.0: - added new %(column_0N_name)s, %(column_0_N_name)s, and related tokens that produce concatenations of names, keys, or labels for all columns referred to by a given constraint.

See Also

:ref:`constraint_naming_conventions` - for detailed usage examples.

info

Optional data dictionary which will be populated into the .SchemaItem.info attribute of this object.

New in version 1.0.0.
def __repr__(self):
def __setstate__(self, state):

Undocumented

def _add_table(self, name, schema, table):

Undocumented

@util.preload_module('sqlalchemy.engine.url')
def _bind_to(self, bind):
Bind this MetaData to an Engine, Connection, string or URL.
def _remove_table(self, name, schema):

Undocumented

def bind(self):

An _engine.Engine or _engine.Connection to which this _schema.MetaData is bound.

Typically, a _engine.Engine is assigned to this attribute so that "implicit execution" may be used, or alternatively as a means of providing engine binding information to an ORM .Session object:

engine = create_engine("someurl://")
metadata.bind = engine
Deprecated since version 1.4: The metadata.bind attribute, as part of the deprecated system of "implicit execution", is itself deprecated and will be removed in SQLAlchemy 2.0.

See Also

:ref:`dbengine_implicit` - background on "bound metadata"

def clear(self):
Clear all Table objects from this MetaData.
def create_all(self, bind=None, tables=None, checkfirst=True):

Create all tables stored in this metadata.

Conditional by default, will not attempt to recreate tables already present in the target database.

Parameters
bind

A .Connectable used to access the database; if None, uses the existing bind on this MetaData, if any.

Note

the "bind" argument will be required in SQLAlchemy 2.0.

tablesOptional list of Table objects, which is a subset of the total tables in the MetaData (others are ignored).
checkfirstDefaults to True, don't issue CREATEs for tables already present in the target database.
def drop_all(self, bind=None, tables=None, checkfirst=True):

Drop all tables stored in this metadata.

Conditional by default, will not attempt to drop tables not present in the target database.

Parameters
bind

A .Connectable used to access the database; if None, uses the existing bind on this MetaData, if any.

Note

the "bind" argument will be required in SQLAlchemy 2.0.

tablesOptional list of Table objects, which is a subset of the total tables in the MetaData (others are ignored).
checkfirstDefaults to True, only issue DROPs for tables confirmed to be present in the target database.
def is_bound(self):
True if this MetaData is bound to an Engine or Connection.
def reflect(self, bind=None, schema=None, views=False, only=None, extend_existing=False, autoload_replace=True, resolve_fks=True, **dialect_kwargs):

Load all available table definitions from the database.

Automatically creates Table entries in this MetaData for any table available in the database but not yet present in the MetaData. May be called multiple times to pick up tables recently added to the database, however no special action is taken if a table in this MetaData no longer exists in the database.

Parameters
bind

A .Connectable used to access the database; if None, uses the existing bind on this MetaData, if any.

Note

the "bind" argument will be required in SQLAlchemy 2.0.

schemaOptional, query and reflect tables from an alternate schema. If None, the schema associated with this _schema.MetaData is used, if any.
viewsIf True, also reflect views.
only

Optional. Load only a sub-set of available named tables. May be specified as a sequence of names or a callable.

If a sequence of names is provided, only those tables will be reflected. An error is raised if a table is requested but not available. Named tables already present in this MetaData are ignored.

If a callable is provided, it will be used as a boolean predicate to filter the list of potential table names. The callable is called with a table name and this MetaData instance as positional arguments and should return a true value for any table to reflect.

extend​_existing

Passed along to each _schema.Table as :paramref:`_schema.Table.extend_existing`.

New in version 0.9.1.
autoload​_replace

Passed along to each _schema.Table as :paramref:`_schema.Table.autoload_replace`.

New in version 0.9.1.
resolve​_fks

if True, reflect _schema.Table objects linked to _schema.ForeignKey objects located in each _schema.Table. For _schema.MetaData.reflect, this has the effect of reflecting related tables that might otherwise not be in the list of tables being reflected, for example if the referenced table is in a different schema or is omitted via the :paramref:`.MetaData.reflect.only` parameter. When False, _schema.ForeignKey objects are not followed to the _schema.Table in which they link, however if the related table is also part of the list of tables that would be reflected in any case, the _schema.ForeignKey object will still resolve to its related _schema.Table after the _schema.MetaData.reflect operation is complete. Defaults to True.

New in version 1.3.0.
**dialect​_kwargs

Additional keyword arguments not mentioned above are dialect specific, and passed in the form <dialectname>_<argname>. See the documentation regarding an individual dialect at :ref:`dialect_toplevel` for detail on documented arguments.

New in version 0.9.2: - Added :paramref:`.MetaData.reflect.**dialect_kwargs` to support dialect-level reflection options for all _schema.Table objects reflected.
def remove(self, table):
Remove the given Table object from this MetaData.
_bind =

Undocumented

_fk_memos =

Undocumented

_schemas =

Undocumented

_sequences =

Undocumented

info =

Info dictionary associated with the object, allowing user-defined data to be associated with this .SchemaItem.

The dictionary is automatically generated when first accessed. It can also be specified in the constructor of some objects, such as _schema.Table and _schema.Column.

naming_convention =

Undocumented

schema =

Undocumented

tables =

A dictionary of _schema.Table objects keyed to their name or "table key".

The exact key is that determined by the _schema.Table.key attribute; for a table with no _schema.Table.schema attribute, this is the same as _schema.Table.name. For a table with a schema, it is typically of the form schemaname.tablename.

See Also

_schema.MetaData.sorted_tables

@property
sorted_tables =

Returns a list of _schema.Table objects sorted in order of foreign key dependency.

The sorting will place _schema.Table objects that have dependencies first, before the dependencies themselves, representing the order in which they can be created. To get the order in which the tables would be dropped, use the reversed() Python built-in.

Warning

The .MetaData.sorted_tables attribute cannot by itself accommodate automatic resolution of dependency cycles between tables, which are usually caused by mutually dependent foreign key constraints. When these cycles are detected, the foreign keys of these tables are omitted from consideration in the sort. A warning is emitted when this condition occurs, which will be an exception raise in a future release. Tables which are not part of the cycle will still be returned in dependency order.

To resolve these cycles, the :paramref:`_schema.ForeignKeyConstraint.use_alter` parameter may be applied to those constraints which create a cycle. Alternatively, the _schema.sort_tables_and_constraints function will automatically return foreign key constraints in a separate collection when cycles are detected so that they may be applied to a schema separately.

Changed in version 1.3.17: - a warning is emitted when .MetaData.sorted_tables cannot perform a proper sort due to cyclical dependencies. This will be an exception in a future release. Additionally, the sort will continue to return other tables not involved in the cycle in dependency order which was not the case previously.

See Also

_schema.sort_tables

_schema.sort_tables_and_constraints

_schema.MetaData.tables

_reflection.Inspector.get_table_names

_reflection.Inspector.get_sorted_table_and_fkc_names