Mysql
 sql >> Datenbank >  >> RDS >> Mysql

slqlalchemy UniqueConstraint VS Index (eindeutig =wahr)

Der Hauptunterschied besteht darin, dass der Index API ermöglicht das Definieren eines Index außerhalb einer Tabellendefinition, solange er die Tabelle durch die übergebenen SQL-Konstrukte referenzieren kann, ein UniqueConstraint und Einschränkungen im Allgemeinen muss inline in der Tabellendefinition definiert werden :

Zu verstehen ist, dass während der Konstruktion einer deklarativen Klasse eine neue Tabelle entsteht wird konstruiert, wenn kein expliziter __table__ übergeben wird . In Ihrer Beispielmodellklasse die UniqueConstraint Die Instanz ist an ein Klassenattribut gebunden, aber die deklarative Basis enthält keine Einschränkungen in der erstellten Tabelle Instanz aus Attributen. Sie müssen es in den Tabellenargumenten übergeben:

class MyTable(DeclBase):
    __tablename__ = 'my_table'
    ...
    # A positional argument tuple, passed to Table constructor
    __table_args__ = (
        UniqueConstraint(attr_2, attr_3, name='my_table_uidx'),
    )

Beachten Sie, dass Sie den Einschränkungsnamen als Schlüsselwortargument übergeben müssen. Sie können die Einschränkung auch mit Table.append_constraint() , falls vor jedem Versuch, die Tabelle zu erstellen, aufgerufen wird:

class MyTable(DeclBase):
    ...

MyTable.__table__.append_constraint(
    UniqueConstraint('attr_2', 'attr_3', name='my_table_uidx'))