我有一列goods.visible
(布尔值),我想用goods.status
(枚举)替换它。在
我需要用另一列替换一列,并使用sqlalchemy迁移数据(使用它的数据类型转换机制)。由于sqlite不支持ALTER TABLE,因此我必须为此使用batch_alter_table
alembic操作。在
我的迁移如下所示。它抛出sqlite3.OperationalError: no such column: goods.status
,因为在我的旧表中没有这样的列(使用批处理创建新表用于迁移)
def upgrade():
with op.batch_alter_table('goods') as batch_op:
batch_op.add_column(sa.Column('status', sa.Enum('published', 'unpublished', 'deleted'), nullable=True))
conn = op.get_bind()
Session = sa.orm.sessionmaker()
session = Session(bind=conn)
for good in session.query(Good):
# I want to perform some data updates & insert data into new column
batch_op.drop_column('visible')
如果我要添加load_only
来指定要从表中选择的列:
sqlite3.OperationalError: no such column: goods.status
我将得到错误sqlalchemy.exc.ArgumentError: Can't find property named 'visible' on the mapped entity Mapper|Good|goods in this Query.
。我明白为什么我得到它-我没有更多的属性在我的模型中可见。在
在这种情况下,如何使用alembic迁移数据?在
我试着用原始查询。。但上面写着没有桌子:
^{pr2}$Hovewer inspector显示goods
表:
inspector = sa.inspect(conn.engine)
for table_name in inspector.get_table_names():
print(table_name)
for column in inspector.get_columns(table_name):
print("Column: %s" % column['name'])
显示器
goods
Column: id
Column: name
Column: price
Column: visible
可以有多个batch\u alter_表块。使用第一个块添加新列,然后(在块外部和之后)运行业务逻辑(在本例中,将布尔值转换为某些枚举值),然后使用另一个块删除列。在
什么比如:在
相关问题 更多 >
编程相关推荐