Go 使用旧表中的架构和数据创建表

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

我正在编写一个脚本,该脚本的目的是:基于包含后缀日期时间的旧表设置表名(例如,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', @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