核心步骤
-
数据库表设计
创建与二维数组结构匹配的表,例如数组[["张三",25],["李四",30]]
对应表结构:CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), age INT );
-
数据预处理
- 验证数组维度(确保每行列数一致)
- 过滤非法字符(如单引号转义为)
- 处理空值(转换为
NULL
或默认值)
-
数据库连接(以Python为例)
import mysql.connector db = mysql.connector.connect( host="localhost", user="root", password="", database="test_db" ) cursor = db.cursor()
四种实现方法
▶ 方法1:逐行插入(适合小数据量)
data = [["张三", 25], ["李四", 30]] for row in data: sql = "INSERT INTO users (name, age) VALUES (%s, %s)" cursor.execute(sql, (row[0], row[1])) db.commit() # 提交事务
▶ 方法2:批量插入(高效推荐)
sql = "INSERT INTO users (name, age) VALUES (%s, %s)" cursor.executemany(sql, data) # 一次性提交所有行 db.commit()
▶ 方法3:预处理语句(防SQL注入)
// Java示例(JDBC) String sql = "INSERT INTO users (name, age) VALUES (?, ?)"; PreparedStatement pstmt = conn.prepareStatement(sql); for (String[] row : data) { pstmt.setString(1, row[0]); pstmt.setInt(2, Integer.parseInt(row[1])); pstmt.addBatch(); // 加入批处理 } pstmt.executeBatch(); // 执行批操作
▶ 方法4:ORM框架(Python SQLAlchemy)
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData engine = create_engine("mysql+pymysql://user:pass@localhost/test_db") metadata = MetaData() users = Table('users', metadata, Column('name', String(50)), Column('age', Integer)) # 将二维数组转为字典列表 dict_list = [{"name": row[0], "age": row[1]} for row in data] engine.execute(users.insert(), dict_list) # 批量插入
关键注意事项
-
事务管理
- 批量操作前开启事务,失败时回滚:
try: cursor.executemany(sql, data) db.commit() except Exception as e: db.rollback() print("Error:", e)
- 批量操作前开启事务,失败时回滚:
-
防SQL注入
- 永远不要拼接SQL字符串:
❌"INSERT INTO users VALUES ('" + name + "')"
✅ 使用参数化查询(%s
/ /@param
)
- 永远不要拼接SQL字符串:
-
性能优化
| 数据量 | 方案 | 优势 |
|————–|———————|———————–|
| < 1000行 | 逐行插入 | 代码简单 |
| > 1000行 | 批量插入 | 减少网络I/O开销 |
| 超大数据 | 分批次批量插入 | 避免内存溢出 | -
数据类型转换
确保数组中的数据类型与数据库字段匹配,特别是:- 日期格式 → 转为
DATE
/DATETIME
- 布尔值 → 转为
0/1
或TINYINT
- 空字符串 → 数据库
NULL
- 日期格式 → 转为
常见问题解决
- 乱码问题:连接数据库时指定字符集(如
charset=utf8mb4
) - 特殊符号存储:使用参数化查询自动处理转义
- 大数据超时:调整数据库超时设置(如MySQL的
max_allowed_packet
)
引用说明
- MySQL官方文档:参数化查询规范 dev.mysql.com/doc
- OWASP SQL注入防护指南 owasp.org
- Python DB-API标准 PEP 249
通过以上方法,可安全高效地将二维数组存储到数据库,实际开发中推荐批量插入+参数化查询的组合方案,兼顾性能与安全性。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/27542.html