Ik zou een opgeslagen procedure maken:
DROP PROCEDURE IF EXISTS CopyTable;
DELIMITER $$
CREATE PROCEDURE CopyTable(IN _mytable VARCHAR(64), _table_name VARCHAR(64))
BEGIN
SET FOREIGN_KEY_CHECKS=0;
SET @stmt = CONCAT('DROP TABLE IF EXISTS ',_table_name);
PREPARE stmt1 FROM @stmt;
EXECUTE stmt1;
SET FOREIGN_KEY_CHECKS=1;
SET @stmt = CONCAT('CREATE TABLE ',_table_name,' as select * from ', _mytable);
PREPARE stmt1 FROM @stmt;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END$$
DELIMITER ;
en ren dan gewoon:
args = ['mytable', 'table_name']
cursor.callproc('CopyTable', args)
om het eenvoudig en modulair te houden. Natuurlijk moet je een soort van foutcontrole uitvoeren en je zou zelfs de winkelprocedure een code kunnen laten retourneren om succes of mislukking aan te geven.