2013-12-18 13 views
9

Chciałbym zmienić typ kolumny bazy danych z ciągu na liczbę całkowitą za pomocą Alembic. Jeśli używam czystego SQL, to osiąga cel:Jak używać klauzuli USING w Alembic/SQLAchemy?

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

Ale gdy używam alembic jak:

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) 

mam błąd:

HINT: Please use USING clause for carrying out the conversion 

instrukcji SQL generowany przez SQLAlchemy był:

ALTER TABLE statistic_ticket ALTER COLUMN tags TYPE INTEGER' {} 

Ca n ktoś mi pokazać, jak to zrobić w alembic lub SQL w SQLAlchemy przez op.execute(SQL)?

+0

ja oczyścić swoje pytanie, w tym głosowanie, aby zamknąć [inne pytanie] (http://stackoverflow.com/questions/20687151/how-to-use-using-clause-in-alembic), które opublikowałeś na ten sam temat. Również oznaczyłem to pytanie PostgreSQL, ponieważ to właśnie oznaczyłeś drugie pytanie. Czy możesz po prostu sprawdzić, czy baza danych, z której korzystasz, to Postgresql, ponieważ oznaczono inną bazę danych? Dzięki –

+0

Dzięki, wydaje się, że sqlalchemy/alembic nie obsługuje tej klauzuli USING na postgresql. – SieuTruc

+0

Czy znalazłeś ostateczne źródło tych informacji? Jeśli tak, zaleciłbym dodanie odpowiedzi na własne pytanie stwierdzające, że (że Alembic nie obsługuje klauzuli "USING"), dołącz źródło, a następnie zaznacz swoją odpowiedź jako odpowiedź na pytanie. –

Odpowiedz

2

Od alembic 0.8.8, można użyć postgresql_using kluczowe:

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

W poprzednich wersjach, trzeba użyć op.execute:

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

Alembic 0.8.8 jest obecnie wyłączone, włączając postgresql_using – dequis

Powiązane problemy