2009-05-15 11 views
7

Supponiamo che io sono un engine che indicano al database MySQL:Come generare un file con DDL nel dialetto SQL del motore in SQLAlchemy?

engine = create_engine('mysql://arthurdent:[email protected]/dtdb', echo=True) 

posso compilare dtdb con tavoli, FKS, ecc per:

metadata.create_all(engine) 

C'è un modo semplice per generare il file SQL che contiene tutte le istruzioni DDL invece di applicare effettivamente queste istruzioni DDL allo dtdb?

Finora sono riuscito a catturare l'output del registro SQLAlchemy prodotto da echo=True e modificarlo a mano. Ma è troppo doloroso.

Sembra che SA abbia API di gestione dello schema piuttosto elaborate, ma non ho visto esempi di streaming delle definizioni dello schema come testo.

risposta

13

La risposta rapida è nello SQLAlchemy 0.8 FAQ.

In SQLAlchemy 0.8 è necessario fare

engine = create_engine(
'mssql+pyodbc://./MyDb', 
strategy='mock', 
executor= lambda sql, *multiparams, **params: print (sql.compile(dialect=engine.dialect))) 

Nel SQLAlchemy 0.9 la sintassi è semplificata.

engine = create_engine(
'mssql+pyodbc://./MyDb', 
strategy='mock', 
executor= lambda sql, *multiparams, **params: print (sql) 

La risposta più lunga è che l'acquisizione dell'output presenta ancora alcuni problemi. Come con la codifica di letterali di tipi. Ma questo non è stato un problema abbastanza grande da permettere a nessuno di aumentare il livello di prurito. È sempre possibile consentire a SQLAlchemy di creare in modo programmatico un database vuoto e scaricare l'SQL da lì.

Il problema più difficile è la gestione delle migrazioni dello schema. Questo è dove SQLAlchemy-migrate può aiutarti.

+0

Questo link FAQ è quello che mi serviva, grazie! :) Non stavo cercando la gestione dello schema simile alla migrazione. Semplicemente, avevo bisogno di un semplice hack per afferrare DDL senza perdere tempo con l'echo del motore. –

+0

Sembra che sia cambiato in Python 0.9. Inoltre, le FAQ non sembrano esistere per 0.9. –

+0

La seconda sintassi non ha funzionato in SQLAlchemy 1.0.12 per me - consultare https://groups.google.com/d/topic/sqlalchemy/r9neOsc64wc/discussion –

Problemi correlati