Sqlite migrate_data() utility method
Sqlite db migration scripts are updated to use common method migrate_data() to migrate data from old table to new table. Co-Authored-by: Angus Salkeld <asalkeld@mirantis.com> Change-Id: I95d84f00cc4acae8ff9af39935e6cc316318ae71
This commit is contained in:
parent
b766a40c00
commit
b44a651c74
|
@ -13,6 +13,8 @@
|
|||
|
||||
import sqlalchemy
|
||||
|
||||
from heat.db.sqlalchemy import utils as migrate_utils
|
||||
|
||||
|
||||
def upgrade(migrate_engine):
|
||||
meta = sqlalchemy.MetaData(bind=migrate_engine)
|
||||
|
@ -59,16 +61,7 @@ def _downgrade_045_sqlite(migrate_engine, metadata, table):
|
|||
*(columns + constraints))
|
||||
new_table.create()
|
||||
|
||||
migrate_data = """
|
||||
INSERT INTO stack__tmp__
|
||||
SELECT id, created_at, updated_at, name, raw_template_id,
|
||||
user_creds_id, username, owner_id, status, status_reason,
|
||||
parameters, timeout, tenant, disable_rollback, action,
|
||||
deleted_at, stack_user_project_id
|
||||
FROM stack;"""
|
||||
|
||||
migrate_engine.execute(migrate_data)
|
||||
|
||||
table.drop()
|
||||
|
||||
new_table.rename(table_name)
|
||||
migrate_utils.migrate_data(migrate_engine,
|
||||
table,
|
||||
new_table,
|
||||
['backup'])
|
||||
|
|
|
@ -13,6 +13,8 @@
|
|||
|
||||
import sqlalchemy
|
||||
|
||||
from heat.db.sqlalchemy import utils as migrate_utils
|
||||
|
||||
|
||||
def upgrade(migrate_engine):
|
||||
meta = sqlalchemy.MetaData(bind=migrate_engine)
|
||||
|
@ -47,17 +49,7 @@ def _downgrade_052_sqlite(migrate_engine, metadata, table):
|
|||
*(columns + constraints))
|
||||
new_table.create()
|
||||
|
||||
migrate_data = """
|
||||
INSERT INTO %s__tmp__
|
||||
SELECT id, created_at, updated_at, name, raw_template_id,
|
||||
user_creds_id, username, owner_id, status, status_reason,
|
||||
parameters, timeout, tenant, disable_rollback, action,
|
||||
deleted_at, stack_user_project_id, backup, nested_depth,
|
||||
tags
|
||||
FROM stack;""" % table_name
|
||||
|
||||
migrate_engine.execute(migrate_data)
|
||||
|
||||
table.drop()
|
||||
|
||||
new_table.rename(table_name)
|
||||
migrate_utils.migrate_data(migrate_engine,
|
||||
table,
|
||||
new_table,
|
||||
['convergence'])
|
||||
|
|
|
@ -114,17 +114,13 @@ def _downgrade_sqlite(migrate_engine):
|
|||
ignorecols=ignorecols,
|
||||
ignorecons=ignorecons)
|
||||
|
||||
migrate_data = """
|
||||
INSERT INTO %s
|
||||
SELECT id, created_at, updated_at, name, raw_template_id,
|
||||
user_creds_id, username, owner_id, status, status_reason,
|
||||
parameters, timeout, tenant, disable_rollback, action,
|
||||
deleted_at, stack_user_project_id, backup, nested_depth,
|
||||
convergence
|
||||
FROM stack;""" % new_stack.name
|
||||
migrate_engine.execute(migrate_data)
|
||||
stack.drop()
|
||||
new_stack.rename(table_name)
|
||||
migrate_utils.migrate_data(migrate_engine,
|
||||
stack,
|
||||
new_stack,
|
||||
['prev_raw_template_id',
|
||||
'current_traversal',
|
||||
'current_deps'])
|
||||
|
||||
# add the indexes back to new table
|
||||
_add_indexes(migrate_engine, new_stack)
|
||||
|
||||
|
|
|
@ -57,3 +57,31 @@ def clone_table(name, parent, meta, newcols=[], ignorecols=[], swapcols={},
|
|||
|
||||
new_table.create()
|
||||
return new_table
|
||||
|
||||
|
||||
def migrate_data(migrate_engine,
|
||||
table,
|
||||
new_table,
|
||||
skip_columns=None):
|
||||
|
||||
table_name = table.name
|
||||
|
||||
list_of_rows = list(table.select().order_by(
|
||||
sqlalchemy.sql.expression.asc(table.c.created_at))
|
||||
.execute())
|
||||
|
||||
colnames = [c.name for c in table.columns]
|
||||
|
||||
for row in list_of_rows:
|
||||
values = dict(zip(colnames,
|
||||
map(lambda colname: getattr(row, colname),
|
||||
colnames)))
|
||||
if skip_columns is not None:
|
||||
for column in skip_columns:
|
||||
del values[column]
|
||||
|
||||
migrate_engine.execute(new_table.insert(values))
|
||||
|
||||
table.drop()
|
||||
|
||||
new_table.rename(table_name)
|
||||
|
|
Loading…
Reference in New Issue