【问题标题】:How to add a column after another column in sqlalchemy for mysql?如何在 mysql 的 sqlalchemy 中的另一列之后添加一列?
【发布时间】:2021-03-19 07:50:50
【问题描述】:

我有一个表,我需要在 a 列之后添加 a_1 列,并且表结构类似于 a、b、c、d 列?这个怎么加?

下面的查询在 d 之后添加列,但我想在 a 之后添加列?

def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('sample_table', sa.Column('a_1', mysql.JSON(), nullable=True, ))
# ### end Alembic commands ###


def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_column('sample_table', 'a_1')
# ### end Alembic commands ###

【问题讨论】:

标签: python mysql alembic


【解决方案1】:
add_column(table_name, column, schema=None)

使用当前迁移上下文发出“添加列”指令。

例如:

from alembic import op
from sqlalchemy import Column, String

op.add_column('organization',
    Column('name', String())
)

提供的 Column 对象也可以指定一个 ForeignKey,引用一个远程表名。 Alembic 将自动生成一个存根“引用”表并发出第二个 ALTER 语句以单独添加约束:

from alembic import op
from sqlalchemy import Column, INTEGER, ForeignKey

op.add_column('organization',
    Column('account_id', INTEGER, ForeignKey('accounts.id'))
)

请注意,此语句使用 SQLAlchemy 库中的 Column 构造。特别是,要在数据库端创建的默认值是使用 server_default 参数指定的,而不是仅指定 Python 端默认值的 default:

from alembic import op
from sqlalchemy import Column, TIMESTAMP, func

# specify "DEFAULT NOW" along with the column add
op.add_column('account',
    Column('timestamp', TIMESTAMP, server_default=func.now())
)

参数 table_name – 父表的字符串名称。

column – 代表新列的 sqlalchemy.schema.Column 对象。

schema – 在其中操作的可选模式名称。要控制默认行为之外的架构引用,请使用 SQLAlchemy 构造quoted_name。

来源https://alembic.sqlalchemy.org/en/latest/ops.html

【讨论】:

    猜你喜欢
    • 2015-08-08
    • 1970-01-01
    • 2018-06-28
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 2015-02-07
    相关资源
    最近更新 更多