使用Golang将数组数据批量插入SQL Server无需外部文件的实现方法
内存数组批量插入SQL的实现方案
完全可以不用BULK INSERT和外部文件,仅靠一次SQL查询完成所有行插入,核心是使用SQL原生支持的多行插入语法。
核心语法逻辑
标准SQL的INSERT语句支持一次性传入多组值,语法如下:
INSERT INTO 你的表名 (name, age, job) VALUES ('<name1>', <age1>, '<job1>'), ('<name2>', <age2>, '<job2>'), -- 其余所有行的数值组 ('<nameN>', <ageN>, '<jobN>');
这种方式仅发起一次数据库请求,性能比逐行插入高10~100倍不等,完全基于你内存中的数组数据实现,不需要任何外部文件依赖。
实现注意要点
- 优先使用参数化查询拼接语句,不要直接把字段值拼到SQL字符串中,避免SQL注入风险
- 不同数据库对单次请求的最大数据量有上限,比如MySQL的
max_allowed_packet参数会限制单次请求大小,如果你的数组长度超过1万条,可以拆分成分组,每组500~2000条分批插入即可 - 所有行的字段顺序要和INSERT语句后声明的列顺序严格对应,避免数据插错列
常用语言示例(Python+MySQL为例)
用参数化查询的安全写法:
import mysql.connector # 你现有的结构体数组 row = [ {"name": "张三", "age": 25, "job": "后端工程师"}, {"name": "李四", "age": 27, "job": "产品经理"}, {"name": "王五", "age": 24, "job": "UI设计师"} # 其余数据 ] # 按列顺序整理参数列表 params = [] for item in row: params.append( (item["name"], item["age"], item["job"]) ) # 构造参数占位符 placeholder = ', '.join(['(%s, %s, %s)'] * len(params)) sql = f"INSERT INTO employee (name, age, job) VALUES {placeholder}" # 一次性执行语句 conn = mysql.connector.connect(host="127.0.0.1", user="root", password="your_pass", database="your_db") cursor = conn.cursor() # 把二维参数列表展平为一维传入 cursor.execute(sql, tuple([i for item in params for i in item])) conn.commit() cursor.close() conn.close()
内容的提问来源于stack exchange,提问作者Muhammed Roshan
相关产品推荐
相关产品推荐

