2013-12-18 11 views
9

Vorrei modificare il tipo di colonna del database da stringa a intero utilizzando Alembic. Se uso SQL puro, si raggiunge l'obiettivo:Come utilizzare la clausola USING in Alembic/SQLAchemy?

alter table statistic_ticket alter column tags type bigint using tags::bigint; 

Ma quando io uso Alembic come:

import sqlalchemy as sa 
def upgrade(): 
    op.alter_column('statistic_ticket', 'tags', nullable = True, existing_type=sa.String(length=255), type_=sa.Integer, existing_nullable=True) 

ho ottenuto un errore:

HINT: Please use USING clause for carrying out the conversion 

L'istruzione SQL generato da SQLAlchemy era:

ALTER TABLE statistic_ticket ALTER COLUMN tags TYPE INTEGER' {} 

Ca n qualcuno mi mostra come fare in alambicco o SQL in SQLAlchemy tramite op.execute(SQL)?

+0

Ho ripulito la tua domanda, compreso il voto di chiudere [altra domanda] (http://stackoverflow.com/questions/20687151/how-to-use-using-clause-in-alembic) che hai pubblicato su questo stesso argomento. Ho anche taggato questa domanda PostgreSQL, poiché era quello che hai taggato l'altra domanda. Puoi semplicemente verificare che il database che stai utilizzando sia Postgresql, come hai fatto con l'altro database taggato? Grazie –

+0

Grazie, sembra che sqlalchemy/alembic non supporti quella clausola USING su postgresql. – SieuTruc

+0

Hai trovato una fonte definitiva per quella informazione? In tal caso, suggerirei di aggiungere una risposta alla tua stessa domanda affermando proprio che (che Alembic non supporta la clausola "USING"), includere la fonte, quindi contrassegnare la risposta come la risposta alla domanda. –

risposta

2

Da Alembic 0.8.8, è possibile utilizzare la parola chiave postgresql_using:

op.alter_column('statistic_ticket', 'tags', type_=sa.BigInteger, 
       postgresql_using='tags::bigint') 

Nelle versioni precedenti, è necessario utilizzare op.execute:

op.execute('ALTER TABLE statistic_ticket ALTER COLUMN ' 
      'tags TYPE bigint USING tags::bigint') 
+1

Alambicco 0.8.8 è fuori, incluso postgresql_using – dequis

Problemi correlati