sql >> Database teknologi >  >> RDS >> Mysql

slqlalchemy UniqueConstraint VS Index(unique=True)

Den største forskel er, at mens Index API tillader at definere et indeks uden for en tabeldefinition, så længe det kan referere til tabellen gennem de beståede SQL-konstruktioner, en UniqueConstraint og begrænsninger generelt skal defineres inline i tabeldefinitionen :

Det man skal forstå er, at under konstruktionen af ​​en deklarativ klasse en ny Tabel er konstrueret, hvis ikke bestået en eksplicit __table__ . I dit eksempelmodel klassen UniqueConstraint instans er bundet til en klasseattribut, men den deklarative base inkluderer ikke begrænsninger i den oprettede Tabel instans fra attributter. Du skal sende det i tabelargumenterne:

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

Bemærk, at du skal sende begrænsningsnavnet som et nøgleordsargument. Du kan også overføre begrænsningen ved hjælp af Table.append_constraint() , hvis den kaldes før ethvert forsøg på at oprette tabellen:

class MyTable(DeclBase):
    ...

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



  1. Mysql:Indstil formatet DATETIME til 'DD-MM-YYYY TT:MM:SS', når du opretter en tabel

  2. parse.com open source-alternativer til backend

  3. org.hibernate.AssertionFailure:null id i indtastning (du skal ikke tømme sessionen efter en undtagelse)

  4. Tilføj en beregnet kolonne til en eksisterende tabel i SQL Server