A table-level INDEX. Defines a composite (one or more column) INDEX. E.g.:: sometable = Table( "sometable", metadata, Column("name", String(50)), Column("address", String(100)), ) Index("some_index", sometable.c.name
| 5534 | |
| 5535 | |
| 5536 | class Index( |
| 5537 | DialectKWArgs, ColumnCollectionMixin, HasConditionalDDL, SchemaItem |
| 5538 | ): |
| 5539 | """A table-level INDEX. |
| 5540 | |
| 5541 | Defines a composite (one or more column) INDEX. |
| 5542 | |
| 5543 | E.g.:: |
| 5544 | |
| 5545 | sometable = Table( |
| 5546 | "sometable", |
| 5547 | metadata, |
| 5548 | Column("name", String(50)), |
| 5549 | Column("address", String(100)), |
| 5550 | ) |
| 5551 | |
| 5552 | Index("some_index", sometable.c.name) |
| 5553 | |
| 5554 | For a no-frills, single column index, adding |
| 5555 | :class:`_schema.Column` also supports ``index=True``:: |
| 5556 | |
| 5557 | sometable = Table( |
| 5558 | "sometable", metadata, Column("name", String(50), index=True) |
| 5559 | ) |
| 5560 | |
| 5561 | For a composite index, multiple columns can be specified:: |
| 5562 | |
| 5563 | Index("some_index", sometable.c.name, sometable.c.address) |
| 5564 | |
| 5565 | Functional indexes are supported as well, typically by using the |
| 5566 | :data:`.func` construct in conjunction with table-bound |
| 5567 | :class:`_schema.Column` objects:: |
| 5568 | |
| 5569 | Index("some_index", func.lower(sometable.c.name)) |
| 5570 | |
| 5571 | An :class:`.Index` can also be manually associated with a |
| 5572 | :class:`_schema.Table`, |
| 5573 | either through inline declaration or using |
| 5574 | :meth:`_schema.Table.append_constraint`. When this approach is used, |
| 5575 | the names |
| 5576 | of the indexed columns can be specified as strings:: |
| 5577 | |
| 5578 | Table( |
| 5579 | "sometable", |
| 5580 | metadata, |
| 5581 | Column("name", String(50)), |
| 5582 | Column("address", String(100)), |
| 5583 | Index("some_index", "name", "address"), |
| 5584 | ) |
| 5585 | |
| 5586 | To support functional or expression-based indexes in this form, the |
| 5587 | :func:`_expression.text` construct may be used:: |
| 5588 | |
| 5589 | from sqlalchemy import text |
| 5590 | |
| 5591 | Table( |
| 5592 | "sometable", |
| 5593 | metadata, |
no outgoing calls