我正在使用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 ' {}
答案 0 :(得分:2)
实际上它完全按照我的描述工作。
我的问题是我的alembic脚本中'foo_table'的表定义不包含'bar_id'列,因此SQLALchemy没有使用它来生成SQL ...