Fetch table values using alembic and update to another table.

前端 未结 3 751
广开言路
广开言路 2021-02-07 00:43

I have oauth secret and oauth key in client table. Now I moving them to oauth credentials table which will be created during

3条回答
  •  梦毁少年i
    2021-02-07 01:28

    Finally I solved the problem. Created raw sql to fetch the values and used bulk_insert.

    def upgrade():
        ### commands auto generated by Alembic - please adjust! ###
        op.create_table('client_credential',
        sa.Column('id', sa.Integer(), nullable=False),
        sa.Column('created_at', sa.DateTime(), nullable=False),
        sa.Column('updated_at', sa.DateTime(), nullable=False),
        sa.Column('client_id', sa.Integer(), nullable=False),
        sa.Column('key', sa.String(length=22), nullable=False),
        sa.Column('secret', sa.String(length=44), nullable=False),
        sa.Column('is_active', sa.Boolean(), nullable=False),
        sa.ForeignKeyConstraint(['client_id'], ['client.id'], ),
        sa.PrimaryKeyConstraint('id'),
        sa.UniqueConstraint('key')
        )
        #http://stackoverflow.com/questions/15725859/sqlalchemy-alembic-bulk-insert-fails-str-object-has-no-attribute-autoincre
        client_credential = sa.sql.table('client_credential',
            sa.Column('client_id', sa.Integer, nullable=False),
            sa.Column('is_active', sa.Boolean, nullable=False, default=True),
            sa.Column('key', sa.String(22), nullable=False, default=True),
            sa.Column('secret', sa.String(22), nullable=False, default=True),
            sa.Column('created_at', sa.DateTime, nullable=False, default=sa.func.now()),
            sa.Column('updated_at', sa.DateTime, nullable=False, default=sa.func.now()),
        )
        conn = op.get_bind()
        res = conn.execute("select secret, key, id from client")
        results = res.fetchall()
        clients = [{'secret': r[0], 'key': r[1], 'is_active':True, 'client_id': r[2], 'created_at': datetime.datetime.now(), 'updated_at': datetime.datetime.now()} for r in results]
        op.bulk_insert(client_credential, clients)
        op.drop_column(u'client', u'secret')
        op.drop_column(u'client', u'key')
        ### end Alembic commands ###
    

提交回复
热议问题