alembic:在迁移中使用子查询进行更新语句
我正在使用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,并在执行时出现编程错误:
'UPDATE foo_table SET ' {}
1 个回答
2
其实它的工作方式正如我上面描述的那样。
我的问题是,在我的alembic脚本中,'foo_table'的表定义里没有包含'bar_id'这一列,所以SQLAlchemy没有用这个来生成SQL语句...