只要一段命令,将mysql数据生成excel文件

数据库操作对程序员来说是再平常不过的事情,但是当有业务人员问我们要数据的时候,那肯定不能冷冰冰的直接把数据给他们,至少要生成一个excel,那么这里我们就用通过快速生成excel文件的命令来解决这个问题。

我们先随手生成一张用例表

CREATE TABLE `t_address` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `key` varchar(255) DEFAULT NULL,
  `address` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

通过这段命令来生成excel

SELECT id,address FROM `t_address` INTO OUTFILE 'D:/a/address.xls'
1 queries executed, 0 success, 1 errors, 0 warnings

查询:select id,address from `t_address` into outfile 'D:/a/address.xls'

错误代码: 1290
The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

执行耗时   : 0 sec
传送时间   : 0 sec
总耗时      : 0 sec

很明显,这条指令是有问题的,那我们来根据错误代码寻找一下错误原因。
这句话的大致意思是:
mysql文件的导入和导出路径有默认的设置,即 secure-file-priv,当传入的csv文件路径与默认的路径冲突时就会报错。

这里面的关键词就是secure-file-priv,接下来我们就来找一下它的默认设置:

SHOW VARIABLES LIKE '%secure%';

看一下结果:
在这里插入图片描述
在这里可以看到,secure_file_priv默认是C:\ProgramData\MySQL\MySQL Server 5.7\Uploads\。

关于secure_file_priv这个值,他可以有三种情况:
1.secure_file_prive=null —— 不允许导入导出
2.secure_file_priv=/path/——只允许在默认的目录下导入导出
3.secure_file_priv=’’ ——导入导出无限制
可以看出,我们这里的值就是默认的第二种情况,既然如此,我们就可以来修改一下这条命令

SELECT id,address FROM `t_address` INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/address.xls'
1 queries executed, 1 success, 0 errors, 0 warnings

查询:select id,address from `t_address` into outfile 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/address.xls'4 行受到影响

执行耗时   : 0.001 sec
传送时间   : 0 sec
总耗时      : 0.002 sec

这里是成功了

好的,可以使用Go语言中的Excelize库和MySQL库来实现。大致流程为:连接MySQL数据库,执行查询语句获取数据,使用Excelize库创建Excel文件并将数据导入其中,最后保存Excel文件。以下是大体的代码框架: ``` // 导入所需库 import ( "database/sql" "fmt" "github.com/360EntSecGroup-Skylar/excelize/v2" _ "github.com/go-sql-driver/mysql" ) // 定义MySQL连接参数和查询语句 const ( dbUsername = "your_username" dbPassword = "your_password" dbHostname = "your_hostname" dbPort = "your_port" dbName = "your_database" ) const query = "SELECT * FROM your_table" func main() { // 连接MySQL数据库 db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", dbUsername, dbPassword, dbHostname, dbPort, dbName)) if err != nil { panic(err) } defer db.Close() // 执行查询语句获取数据 rows, err := db.Query(query) if err != nil { panic(err) } // 创建Excel文件并将数据导入其中 f := excelize.NewFile() sheetName := "Sheet1" row := 1 for rows.Next() { var data1 string var data2 string // ... err = rows.Scan(&data1, &data2) if err != nil { panic(err) } f.SetCellValue(sheetName, fmt.Sprintf("A%d", row), data1) f.SetCellValue(sheetName, fmt.Sprintf("B%d", row), data2) // ... row++ } // 保存Excel文件 err = f.SaveAs("output.xlsx") if err != nil { panic(err) } fmt.Println("Excel file generated successfully!") } ``` 这段代码中的查询语句只是一个示例,请根据实际情况替换为你需要的查询语句。另外还需要修改连接MySQL数据库的参数,Excel文件的输出路径等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值