Go 使用旧表中的架构和数据创建表
我正在编写一个脚本,该脚本的目的是:基于包含后缀日期时间的旧表设置表名(例如,table_1_2020_01_01),基于旧表的架构为该表创建架构,然后从旧表向该表插入数据 我创建了三个MySQL语句,用于设置表名、创建表,然后将数据插入到创建的表中:Go 使用旧表中的架构和数据创建表,go,Go,我正在编写一个脚本,该脚本的目的是:基于包含后缀日期时间的旧表设置表名(例如,table_1_2020_01_01),基于旧表的架构为该表创建架构,然后从旧表向该表插入数据 我创建了三个MySQL语句,用于设置表名、创建表,然后将数据插入到创建的表中: SET @TABLE_NAME = CONCAT(DATE_FORMAT(NOW(), '%Y_%m_%d'), '_new_table'); SET @SQL = CONCAT('CREATE TABLE IF NOT EXISTS', @T
SET @TABLE_NAME = CONCAT(DATE_FORMAT(NOW(), '%Y_%m_%d'), '_new_table');
SET @SQL = CONCAT('CREATE TABLE IF NOT EXISTS', @TABLE_NAME, 'LIKE old_table');
PREPARE stmt FROM @SQL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @SQL = CONCAT('INSERT INTO', @TABLE_NAME, 'SELECT * FROM old_table WHERE id = ?');
PREPARE stmt FROM @SQL;
EXECUTE stmt USING @id;
DEALLOCATE PREPARE stmt;
但是,每次从main运行函数时,我都会收到以下错误:
panic: Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'PREPARE stmt FROM @SQL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt' at line
我在golang中发现将表名设置为var,所以我的解决方案是使用一个准备好的语句并将var传递到准备好的语句中
可能是这样的:
stmt, err := tx.Prepare("CREATE TABLE (?) ...")
if err != nil {
log.Fatal(err)
}
defer stmt.Close() // danger!
_, err = stmt.Exec(tableNameVariable)
是否有一种方法可以使用\uErr=db.Exec()来运行上述查询,或者有更好的方法吗?您可以使用GORM库与数据库交互。 GORM是一个SQL“生成器”,它还允许您编写直接查询来编辑数据库
此外,gorm支持MySQL。您可以使用gorm库与数据库交互。 GORM是一个SQL“生成器”,它还允许您编写直接查询来编辑数据库 此外,gorm支持MySQL