inspectdb existente datos mysql django indexing

mysql - existente - Django: crear índice: columna única no única



django mysql (5)

A partir de Django 1.5, puede usar la opción Meta.index_together :

class QuoteModel(models.Model): # ... fields ... class Meta: index_together = [ ("sequence", "stock"), ]

(nota: la respuesta original de 2009 dijo que no era posible indexar múltiples campos, sino que ha sido reemplazado)

Dado el siguiente modelo, quiero indexar los campos (secuencia, stock)

class QuoteModel(models.Model): quotedate = models.DateField() high = models.FloatField() #(9,2) DEFAULT NULL, low = models.FloatField() #(9,2) DEFAULT NULL, close = models.FloatField() #(9,2) DEFAULT NULL, closeadj = models.FloatField() #(9,2) DEFAULT NULL, volume = models.IntegerField() #(9,2) DEFAULT NULL, stock = models.IntegerField(db_index=True) #(9,2) DEFAULT NULL, open = models.FloatField() #(9,2) DEFAULT NULL, sequence = models.IntegerField() #(9,2) DEFAULT NULL,

Este índice no debe ser exclusivo, en mysql debe ser algo así como:

create index ndx_1 on model_quotemodel(sequence,stock);

La única solución de Django que conozco es crear un archivo "sql" que será ejecutado por django luego de la creación de la tabla. Entonces, creé un "stockmodel.sql" que contenía la siguiente consulta (igual que la anterior :)

create index ndx_1 on model_quotemodel(sequence,stock);

¿Hay alguna manera "más limpia" de hacerlo?




Para seguir con la respuesta aceptada, si está usando South , puede agregar fácilmente una clave compuesta de la siguiente manera:

manage.py schemamigration your_app_name name_for_migration --add-index ModelName.first_field_in_index

Luego puede editar el archivo de migración generado para agregar los campos adicionales en el índice único (verá que es solo una lista de los nombres de campo que se necesitan).

No se olvide de actualizar la migración inversa así como la anterior.


unique_together podría ser lo que estás buscando. Solo ponlo en tu clase Meta dentro de tu modelo.