35

Ho un'applicazione Web che utilizza sqlalchemy (all'interno di Pylons). Ho bisogno di modificare effi-centemente lo schema per poter cambiare la versione di produzione almeno su base giornaliera, forse di più, senza perdere i dati.Vale la pena utilizzare sqlalchemy-migrate?

Ho giocato un po 'con sqlalchemy-migrate durante il fine settimana e direi che mi ha fatto una brutta impressione. Primo: Penso che non possa essere d'aiuto con la migrazione tra due motori di database; è qualcosa che probabilmente potrebbe essere fatto con sqlalchemy da solo. Secondo, i documenti non sembrano aggiornati. Ho dovuto modificare alcune opzioni della riga di comando, come dare il percorso del repository ad ogni comando, questo potrebbe essere un bug di migrazione.

Ma la cosa peggiore è il comando "manage.py test". Non solo in realtà modifica il database (questo punto è chiaramente indicato nella documentazione, quindi non posso dare la colpa migrazione), ma il mio primo script di migrazione appena fatto migrazione dello schema semplicemente stupido, lasciando l'upgrade-declassato db con un schema diverso rispetto l'originale. Ma il "test manage.py" appena risposto qualcosa come

success ! 

Cioè, non ha nemmeno controllare se lo schema è stato lasciato in uno stato coerente. Quindi vale la pena utilizzare la migrazione? Esiste qualche vantaggio rispetto al metodo Do It Yourself associato alle buone pratiche as proposed by S.Lott? Esistono alternative alla SQLAlchemy-migrare in realtà semplificare il processo di migrazione o sto solo cercando di utilizzare la migrazione con un cattivo una priori (quindi si prega di farmi vedere il motivo per cui is't chiaramente superiore per la creazione di colonne CSV come proposto nel link qui sotto) ?

Grazie mille!

risposta

54

Uso Alembic invece:

http://pypi.python.org/pypi/alembic

Grazie per i commenti, a cura di aggiungere qualche ragionamento -

E 'sviluppato dall'autore di SQLAlchemy, ed è nuovo di zecca e ben supportato. Non so abbastanza di sqlalchemy-migrare per dare un buon paragone. Ma ho fatto una rapida lettura dei documenti chiari e concisi di Alembic, poi ho ottenuto la mia migrazione autogenerata lavorando in un tempo molto breve.

Autogenerazione: non è la sua unica modalità di funzionamento, ma se si sceglie, Alembic leggerà la configurazione sqlalchemy dell'applicazione (ad esempio, le classi del modello dichiarativo che impostano tutte le tabelle, i vincoli e le mappature) e confronterà l'effettiva lo stato attuale del tuo database e genera uno script Python che rappresenta il delta tra i due. Passa quindi lo script al comando di aggiornamento di Alembic e lì vai, le differenze vengono risolte. Di solito è necessaria una piccola quantità di modifica dello script di migrazione a mano, e (a) solo la natura delle migrazioni e (b) qualcosa che si vuole fare comunque per assicurarsi di essere pienamente a conoscenza dei passaggi esatti che la migrazione è andando a esibirsi prima di eseguirlo.

Alambicco ha una capacità simile a DVCS anche per il modo in cui vengono monitorate le migrazioni. Rende davvero facile tornare a qualsiasi stato passato del tuo schema db.

+1

Ho sentito Alembic la prima volta, quindi ho controllato il collegamento. Wow è stato scritto da Mike Bayer - l'autore di SQLAlchemy! Lo proverò sicuramente. –

+0

Se usi Flask, ti ​​consiglio di usare Alembic insieme a Flask-Migrate, il che rende tutto molto più semplice. http://flask-migrate.readthedocs.org – fnkr

+0

Seguito il tuo consiglio e cambiato, e ora [Ho una domanda] (http://stackoverflow.com/q/27911685/656912). – orome

3

Io personalmente amo usarlo. È fantastico perché le nuove installazioni (dev, test, prod) possono essere riavviate molto facilmente. Non solo, ma fornisce una casa per l'applicazione come si sviluppa e fornisce buoni punti di ingresso per quelle migrazioni che hanno bisogno di prendere posto come ci si sposta da versione a versione dell'applicazione. Qualcosa deve eseguire alter/etc su server di sviluppo, test e produzione.

È perfetto? No. Puoi lasciare il tuo db in cattivo stato, ma è per questo che hai versioni di sviluppo/testing/produzione.

Personalmente lo uso per il bootstrap mio test di unità in tralicci usando un db SQLite per l'esecuzione di test di unità contro, ma noi usare MySQL in produzione. Quindi ci sono alcuni vantaggi cross platform db di usarlo.

7

Alambicco essere fuori (http://pypi.python.org/pypi/alembic) e mantenuto da SQLAlchemy dell'autore e dato il fatto che sqlalchemy-migrare sviluppo sguardi in fase di stallo, praticamente senza commit di quest'anno (http://code.google.com/p/sqlalchemy-migrate/source/list), penso che non valga la pena di usarlo più, I' Passerò il mio attuale progetto ad Alembic.

Se fosse ancora sottoposto a una forte manutenzione, sarei fiducioso sulla capacità del progetto di rimanere sincronizzato con SQLAlchemy (come prima).