2015-08-31 6 views
13

Sto tentando di utilizzare l'alembic per gestire le migrazioni locali sul mio progetto. Ha funzionato la prima volta, ma poi avevo bisogno di eliminare la cartella e riavviare. (Non chiedere perché, ho dovuto) Sto seguendo this tutorial ed io eseguire il comandol'errore di comando alembic util Impossibile trovare l'identificatore

python manage.py db init 

ed era ok . Ma quando provo a fare funzionare

python manage.py db migrate 

sto ottenendo questo errore:

alembic.util.CommandError: Can't locate revision identified by '31b8ab83c7d' 

Ora, sembra che alambicco è alla ricerca di una revisione che non esiste più. C'è comunque dell'alfabeto per far dimenticare quell'archivio? O come riavviare il confronto da Nessuno a -> generato automaticamente di nuovo?

risposta

39

Alembic memorizza la cronologia delle versioni nel database. Quindi sta usando il valore memorizzato nel tuo database per cercare la revisione. Il numero di versione per il mio database personale è memorizzato nella tabella alembic_version:

mysql> SELECT * FROM alembic_version; 
+-------------+ 
| version_num | 
+-------------+ 
| c8ad125e063 | 
+-------------+ 
1 row in set (0.00 sec) 

Suggerimento: Utilizzare il comando SHOW TABLES se si tratta di un database SQL in base a vedere le tabelle.

per risolvere il problema è sufficiente utilizzare il comando:

DROP TABLE alembic_version; 

o qualunque sia il nome della tabella di versione del database è. E allora avete bisogno di ri-init cartella migrazione utilizzando il comando:

python manage.py db init 

E poi la creazione di una nuova migrazione:

python manage.py db migrate 

E allora si dovrebbe essere pronti per partire con le migrazioni di lavoro in alambicco .

+1

Grazie per la risposta. Ha funzionato. –

+0

Enorme, grazie !!!!! –

7

La soluzione di SirKaiserKai non ha funzionato per me, probabilmente perché ho commesso un errore stupido l'ultima volta che ho eseguito la migrazione e ho eliminato un file che avrei dovuto conservare.

Invece di rilasciare la tabella alembic_revision ho appena aggiornato il valore in version_num in modo che corrispondesse a dove sapevo che si trovava il mio DB.

Assicurarsi di utilizzare l'ID migrazione del file che corrisponde allo stato attuale della vostra base di dati

  1. Controllare il numero di migrazione mancante

    psql=> SELECT * FROM alembic_version; 
    +-------------------------+ 
    |  version_num  | 
    +-------------------------+ 
    | <the missing migration> | 
    +-------------------------+ 
    (1 row) 
    
  2. Aggiornare il valore

    psql=> UPDATE alembic_version 
    psql-> SET version_num = '<true state of DB>' 
    psql-> WHERE version_num = '<the missing migration>'; 
    UPDATE 1 
    

Se il database è in uno stato diverso da quello del file di migrazione <true state of DB> allora si sta solo andando a continuare ad avere errori.

Problemi correlati