sql >> Databasteknik >  >> RDS >> Mysql

slqlalchemy UniqueConstraint VS Index(unique=True)

Den största skillnaden är att medan Index API tillåter att definiera ett index utanför en tabelldefinition så länge det kan referera till tabellen genom de godkända SQL-konstruktionerna, en UniqueConstraint och begränsningar i allmänhet måste definieras inline i tabelldefinitionen :

Saken att förstå är att under konstruktionen av en deklarativ klass en ny Table är konstruerad, om den inte passerats en explicit __tabell__ . I din exempelmodell klassificerar du UniqueConstraint instans är bunden till ett klassattribut, men den deklarativa basen inkluderar inte begränsningar i den skapade tabellen instans från attribut. Du måste skicka det i tabellargumenten:

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'),
    )

Observera att du måste skicka begränsningsnamnet som ett nyckelordsargument. Du kan också skicka begränsningen med Table.append_constraint() , om den anropas innan några försök att skapa tabellen:

class MyTable(DeclBase):
    ...

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



  1. MySql-processlista fylld med sömnposter som leder till för många anslutningar?

  2. '0000-00-00 00:00:00' kan inte representeras som java.sql.Timestamp error

  3. SQL-fråga för att ta bort tabell i MySQL

  4. Skicka MySQL-variabler till skript från kommandoraden