【问题标题】:How to use op.execute in alembic upgrade如何在 alembic 升级中使用 op.execute
【发布时间】:2019-08-14 17:08:12
【问题描述】:

我有一个名为orders 的表,其中有一列名为amount,最初包含某些null 值。

我将其转换为 nullable=False,对于任何新订单,默认值为 0,但在现有表中,已经存在有限的空值。

我想在升级数据库之前将表中的这些空值转换为 0。



"""empty message

Revision ID: 6e5c574cbfb8
Revises: 35f427e85075
Create Date: 2019-03-24 11:09:42.707206

"""

from alembic import op
import sqlalchemy as sa
import sqlalchemy_utils
from sqlalchemy.dialects import postgresql

# revision identifiers, used by Alembic.
revision = '6e5c574cbfb8'
down_revision = '35f427e85075'


def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.execute("UPDATE orders SET amount=0 WHERE amount=null")
    op.alter_column('orders', 'amount',
               existing_type=postgresql.DOUBLE_PRECISION(precision=53),
               nullable=False,
               )
    # ### end Alembic commands ###


def downgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.alter_column('orders', 'amount',
               existing_type=postgresql.DOUBLE_PRECISION(precision=53),
               nullable=True)
    # ### end Alembic commands ###

但这仍然显示错误,有关如何正确使用 op.execute 的任何帮助?

【问题讨论】:

  • 错误是什么?请包含完整的回溯。
  • 请显示您遇到的错误

标签: python flask-sqlalchemy database-migration


【解决方案1】:

应该是:

UPDATE orders SET amount=0 WHERE amount is null;

【讨论】:

    猜你喜欢
    • 2019-12-11
    • 2015-12-01
    • 2020-06-10
    • 2020-12-22
    • 2020-12-06
    • 2015-03-31
    • 2014-04-01
    • 2014-10-13
    • 2014-08-28
    相关资源
    最近更新 更多