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
| 5142 | |
| 5143 | |
| 5144 | class Index( |
| 5145 | DialectKWArgs, ColumnCollectionMixin, HasConditionalDDL, SchemaItem |
| 5146 | ): |
| 5147 | """A table-level INDEX. |
| 5148 | |
| 5149 | Defines a composite (one or more column) INDEX. |
| 5150 | |
| 5151 | E.g.:: |
| 5152 | |
| 5153 | sometable = Table( |
| 5154 | "sometable", |
| 5155 | metadata, |
| 5156 | Column("name", String(50)), |
| 5157 | Column("address", String(100)), |
| 5158 | ) |
| 5159 | |
| 5160 | Index("some_index", sometable.c.name) |
| 5161 | |
| 5162 | For a no-frills, single column index, adding |
| 5163 | :class:`_schema.Column` also supports ``index=True``:: |
| 5164 | |
| 5165 | sometable = Table( |
| 5166 | "sometable", metadata, Column("name", String(50), index=True) |
| 5167 | ) |
| 5168 | |
| 5169 | For a composite index, multiple columns can be specified:: |
| 5170 | |
| 5171 | Index("some_index", sometable.c.name, sometable.c.address) |
| 5172 | |
| 5173 | Functional indexes are supported as well, typically by using the |
| 5174 | :data:`.func` construct in conjunction with table-bound |
| 5175 | :class:`_schema.Column` objects:: |
| 5176 | |
| 5177 | Index("some_index", func.lower(sometable.c.name)) |
| 5178 | |
| 5179 | An :class:`.Index` can also be manually associated with a |
| 5180 | :class:`_schema.Table`, |
| 5181 | either through inline declaration or using |
| 5182 | :meth:`_schema.Table.append_constraint`. When this approach is used, |
| 5183 | the names |
| 5184 | of the indexed columns can be specified as strings:: |
| 5185 | |
| 5186 | Table( |
| 5187 | "sometable", |
| 5188 | metadata, |
| 5189 | Column("name", String(50)), |
| 5190 | Column("address", String(100)), |
| 5191 | Index("some_index", "name", "address"), |
| 5192 | ) |
| 5193 | |
| 5194 | To support functional or expression-based indexes in this form, the |
| 5195 | :func:`_expression.text` construct may be used:: |
| 5196 | |
| 5197 | from sqlalchemy import text |
| 5198 | |
| 5199 | Table( |
| 5200 | "sometable", |
| 5201 | metadata, |
no outgoing calls