2013-12-18 18 views
9

Veritabanının sütun türünü, Alembic kullanarak dize ile tamsayı arasında değiştirmek istiyorum. Ben saf SQL kullanırsanız, hedefe ulaşır:Alembic/SQLAchemy'de USING deyimi nasıl kullanılır?

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

Ama böyle alembic kullandığınızda: sqlalchemy tarafından oluşturulan

HINT: Please use USING clause for carrying out the conversion 

SQL deyimi:

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) 

bir hata aldım :

ALTER TABLE statistic_ticket ALTER COLUMN tags TYPE INTEGER' {} 

Ca n birisi bana op.execute(SQL) aracılığıyla SQLemblchemy'de alembic veya SQL'de nasıl yapıldığını gösterir?

alembic 0.8.8 itibaren
+0

Aynı konu hakkında yayınladığınız [diğer soru] (http://stackoverflow.com/questions/20687151/how-to-use-using-clause-in-alembic). Ayrıca bu soruyu PostgreSQL olarak etiketledim, çünkü bu diğer soruyu etiketlediğiniz şeydi. Kullandığınız veritabanının, diğer veritabanını etiketlediğiniz gibi Postgresql olduğunu doğrulayabilir misiniz? Teşekkürler –

+0

Teşekkürler, öyle görünüyor ki, sqlalchemy/alembic, postgresql üzerindeki USING maddesini desteklemiyor. – SieuTruc

+0

Bu bilgiler için kesin bir kaynak buldunuz mu? Eğer öyleyse, o zaman sorusu için cevap işaretlemek, (Alembic "KULLANARAK" maddesini desteklemediği) sadece belirten kendi sorunuza yanıt ekleyerek tavsiye kaynağı içerecektir. –

cevap

2

, sen postgresql_using anahtar kelime kullanabilirsiniz: önceki sürümleri üzerinde

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

, kullanmak zorunda op.execute: Ben kapatmak için oylama dahil olmak üzere, soru temizledik

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

Alembic Postgresql_using dahil 0.8.8 çıktı – dequis