我正在使用 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 ' {}