2013-02-01 3 views
2

나는 데이터베이스 이전을 관리하기 위해 alembic을 사용하고 있습니다. 현재 마이 그 레이션에서는 SELECT 문 (기본적으로 다른 테이블의 열을 복사)을 기반으로 열을 채울 필요가 있습니다. 내가 일반 SQL로alembic : 마이 그 레이션에서 업데이트 문에 하위 쿼리 사용

을 수행 할 수 있습니다

UPDATE foo_table 
SET bar_id= 
    (SELECT bar_table.id FROM bar_table 
     WHERE bar_table.foo_id = foo_table.id); 

그러나 수행하는 방법을 알아낼 수 증류기와 :

난 '에 대한 일반 SQLAlchemy의 표현식을 사용하려고
execute(
    foo_table.update().\ 
     values({ 
      u'bar_id': ??? 
     }) 
) 

? ? ':

select([bar_table.columns['id']], 
     bar_table.columns[u'foo_id'] == foo_table.columns[u'id']) 

실행 중에 잘못된 SQL 및 ProgrammingError 만 생성됩니다.

'UPDATE foo_table SET ' {} 

답변

1

실제로 위에서 설명한대로 작동합니다.

내 문제는 내 alembic 스크립트의 'foo_table'에 대한 테이블 정의에 'bar_id'열이 포함되지 않아 SQLALchemy가 SQL을 생성하는 데 사용하지 않았기 때문입니다 ...