sql >> Base de Datos >  >> RDS >> Mysql

slqlalchemy UniqueConstraint VS Index (único =Verdadero)

La principal diferencia es que mientras el Index API permite definir un índice fuera de la definición de una tabla siempre que pueda hacer referencia a la tabla a través de las construcciones SQL pasadas, un UniqueConstraint y restricciones en general debe definirse en línea en la definición de la tabla :

Lo que hay que entender es que durante la construcción de una clase declarativa, una nueva Table se construye, si no se pasa un __table__ explícito . En su clase de modelo de ejemplo, UniqueConstraint la instancia está vinculada a un atributo de clase, pero la base declarativa no incluye restricciones en la Table creada instancia de los atributos. Debes pasarlo en los argumentos de la tabla:

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

Tenga en cuenta que debe pasar el nombre de la restricción como argumento de palabra clave. También puede pasar la restricción usando Table.append_constraint() , si se llama antes de cualquier intento de crear la tabla:

class MyTable(DeclBase):
    ...

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