python - alembic:在迁移中使用子查询更新语句

标签 python sqlalchemy database-migration 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 和 ProgrammingError:

'UPDATE foo_table SET ' {}

最佳答案

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

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

关于python - alembic:在迁移中使用子查询更新语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14644238/

相关文章:

python - pydev:在控制台模式下调试(交互式)?

python - Google App Engine (GAE) cron url : url? 关键字=abc

python - 填充表,其中每列来自文本文件的不同行

python - 如何在 SQLAlchemy 中加载嵌套关系?

python - 我如何在 Python 中进行 "override"深度复制?

python - 在 Python 3 中使用 'multiprocessing' 库进行 PostgreSQL 查询

python - 停用词不删除一个单词

sql - 您如何计算在大型 Postgresql 表上创建索引的时间?

php - yii2 迁移不适用

mysql - 从 MySQL 到 SQL Server 迁移和映射表