3

データベースの移行を管理するために alembic を使用しています。現在の移行では、SELECT ステートメントに基づいて列を作成する必要もあります (基本的には、別のテーブルから列をコピーします)。

プレーンな SQL を使用すると、次のことができます。

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

ただし、alembic でそれを行う方法がわかりません。

execute(
    foo_table.update().\
        values({
            u'bar_id': ???
        })
) 

「???」にプレーンな SQLAlchemy 式を使用しようとしました。

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

しかし、それは実行中に悪い SQL と ProgrammingError を生成するだけです:

'UPDATE foo_table SET ' {}
4

1 に答える 1

2

実際には、上で説明したとおりに機能します。

私の問題は、私のalembicスクリプトの「foo_table」のテーブル定義に「bar_id」列が含まれていなかったため、SQLALchemyがそれを使用してSQLを生成しなかったことでした...

于 2013-02-01T10:56:20.760 に答える