3

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

1 回答 1

2

实际上它的工作原理与我上面描述的完全一样。

我的问题是我的alembic脚本中'foo_table'的表定义不包括'bar_id'列,因此SQLALchemy没有使用它来生成SQL ...

于 2013-02-01T10:56:20.760 回答