Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解析一列的内容,并使用flask和flask migrate将结果插入另一列_Flask_Migration - Fatal编程技术网

解析一列的内容,并使用flask和flask migrate将结果插入另一列

解析一列的内容,并使用flask和flask migrate将结果插入另一列,flask,migration,Flask,Migration,我必须从数据库中的一列中获取内容,解析它,添加新列,并将第一步的结果插入到这个新列中。在此之后,应删除“源列”。问题是我不知道如何执行这样的操作,同时保持迁移例程。我的意思是,如果有人建立一个数据库,迁移应该一个接一个地通过,包括这个“奇怪”的迁移 我的第一个想法是编辑迁移文件,并在创建新列和删除旧列之间执行一些脚本,以便在删除旧列之前填充新列 def upgrade(): # ### commands auto generated by Alembic - please adjust

我必须从数据库中的一列中获取内容,解析它,添加新列,并将第一步的结果插入到这个新列中。在此之后,应删除“源列”。问题是我不知道如何执行这样的操作,同时保持迁移例程。我的意思是,如果有人建立一个数据库,迁移应该一个接一个地通过,包括这个“奇怪”的迁移

我的第一个想法是编辑迁移文件,并在创建新列和删除旧列之间执行一些脚本,以便在删除旧列之前填充新列


def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.add_column('requests', sa.Column('payload', sa.Text(), nullable=True))
    move_requests_to_payload() # ???
    op.drop_column('requests', 'get_url')
    op.drop_column('requests', 'portal')
    # ### end Alembic commands ###
像上面这个。
你们知道怎么做吗?

好吧,也许有人会用这个答案

  • 首先,我从模型类中删除了应该在末尾删除的字段,并添加了新的列,生成了迁移文件
  • 因为此时模型类不知道这个字段,所以我被迫使用原始SQL从数据库中获取数据
  • 当我得到这些数据时,我通过
    op.add_column()
    方法创建了新的列,此时我能够使用sqlalchemy ORM

  • 解决方案的最后一部分非常明显,因为我只是查询了DB中的对象,并使用2中的数据更新了它们

  • 更新表后,我删除了旧列
  • def upgrade():
        # ### commands auto generated by Alembic - please adjust! ###
        conn = op.get_bind() 
        session = orm.Session(bind=conn) # it will be used later to update my db
        res = conn.execute('select id, get_url, collection_identifier from requests')
        results = res.fetchall() # this one fetch data from db
        get_urls = [{'id':r[0],'get':r[1]} for r in results] # this one parse response to list of dicitonaries