sql >> Databáze >  >> RDS >> Mysql

slqlalchemy UniqueConstraint VS Index(unique=True)

Hlavní rozdíl je v tom, že zatímco Index API umožňuje definovat index mimo definici tabulky, pokud může odkazovat na tabulku prostřednictvím předávaných konstrukcí SQL, UniqueConstraint a obecně omezení musí být definováno přímo v definici tabulky :

Je třeba porozumět tomu, že během konstrukce deklarativní třídy se vytvoří nová Tabulka je vytvořen, pokud není předán explicitní __table__ . Ve vaší ukázkové třídě modelu UniqueConstraint instance je vázána na atribut třídy, ale deklarativní základ nezahrnuje omezení ve vytvořené tabulce instance z atributů. Musíte jej předat v argumentech tabulky:

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

Všimněte si, že musíte předat název omezení jako argument klíčového slova. Omezení můžete také předat pomocí Table.append_constraint() , pokud je zavoláno před jakýmkoli pokusem o vytvoření tabulky:

class MyTable(DeclBase):
    ...

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



  1. PostgreSQL:Proč se psql nemůže připojit k serveru?

  2. Fulltextové vyhledávání v MySQL:Hodný, zlý a ošklivý

  3. Jak vybrat řádky podle časového intervalu v mysql?

  4. Slovník databáze DevOps pro začátečníky v MySQL