2014-12-10 3 views
2

데이터베이스 업그레이드를위한 "alembic upgrade +1"을 시도 할 때 다음 오류가 발생합니다.Python에서 RedAlift Dialect를 SQLAlchemy 및 Alembic으로 마이그레이션하려면 어떻게해야합니까?

File "/home/jason/redshift/env/lib/python3.4/site-packages/sqlalchemy/engine/default.py", line 436, in do_execute 
    cursor.execute(statement, parameters) 
psycopg2.NotSupportedError: Column "analyses.id" has unsupported type "serial". 

내 SQLAlchemy의의 models.py에는 다음이 포함

sqlalchemy.url = redshift://USER:[email protected]:5439/ 

하지만 어떤 이유로이 방언을 사용하지 않는 것 :

from alembic.ddl.postgresql import PostgresqlImpl 
class RedshiftImpl(PostgresqlImpl): 
    __dialect__ = 'redshift' 

내 URL/호스트입니다. env.py를 수정해야합니까? 또는 models.py?

+0

헤드 업 - redshift 비밀번호가 해당 URL에 노출되어 있습니다. –

답변

3

나는 동일한 문제가있었습니다. 이 게시물의 시점에 PyPI에서 사용할 수있는 최신 버전 0.4.1의 버그입니다. Github에서 직접 설치했고 작동했습니다 (이 글을 쓰는 시점에 마스터가 0.5.1a에 있음). https://github.com/binarydud/redshift_sqlalchemy

문제는 기본 키를 처리하는 데 있습니다. pip를 통해 설치하고 마이그레이션을 생성하는 경우 문제는 PrimarykeyConstraint() 메소드에서 발생합니다. 직렬화 된 컬럼은 포스트그레스에만 존재하고 레드 쉬프트는 존재하지 않습니다.

from alembic import op 
import sqlalchemy as sa 
from redshift_sqlalchemy import dialect as postgresql 

def upgrade(): 
    op.create_table('mytable', 
     sa.Column('id', sa.Integer(), nullable=False), 
     sa.PrimaryKeyConstraint('id') # problem is here: wants to create a serial type 
    ) 

는 또한 redshift_sqlalchemy 모듈 대신 SQLAlchemy의 코어에서 사투리를 가져올 당신의 마이그레이션을 변경하는 것이 좋습니다. 이 예제에서는 중요하지 않지만 redshift 및 postgres 방언이 100 % 정렬되지 않은 경우가 있습니다.

+0

redshift_alchemy에서 방언을 어떻게 가져 오나요? – jobevers

+1

github에서 설치하려면 명령은'pip install git + https : // github.com/binarydud/redshift_sqlalchemy'입니다. – k107