我正在使用 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 ' {}
最佳答案
实际上它的工作原理与我上面描述的完全一样。
我的问题是我的 alembic 脚本中“foo_table”的表定义不包含“bar_id”列,因此 SQLALchemy 没有使用它来生成 SQL...
关于python - alembic:在迁移中使用子查询更新语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14644238/