データベースの移行を管理するために 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 ' {}