python:csv文件批量导入mysql
1.导入sql文件到数据库中
mysql -u username -p
要先创建一个空的数据库
CREATE DATABASE your_database_name;
USE your_database_name;
导入sql文件
source /path/to/your/file.sql;
查看某个表格的结构,为后续数据插入做准备
DESCRIBE table_name;
2.插入假数据到对应的表格中
import pymysql
from datetime import datetime
# 连接到MySQL数据库
conn = pymysql.connect(
host="localhost", # MySQL 主机
user="root", # MySQL 用户名
password="", # MySQL 密码
database="tiku" # 要连接的数据库
)
# 创建游标对象
cursor = conn.cursor()
# 插入数据的SQL语句
insert_query = """
INSERT INTO question_bank (id, subject, question_content, occupation, languages, difficulty, insert_time, update_time, is_deleted)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
"""
# 插入数据的值(假数据)
fake_data = [
(111, "数学基础", "计算两点之间的距离", "学生", "中文", "中等", datetime.now(), None, 0),
(222, "英语阅读理解", "阅读以下文章并回答问题", "学生", "英文", "简单", datetime.now(), None, 0),
(333, "Python编程", "编写一个函数来求解阶乘", "程序员", "英文", "困难", datetime.now(), None, 0),
(444, "历史常识", "第二次世界大战爆发的原因是什么", "学生", "中文", "中等", datetime.now(), None, 0),
(555, "计算机网络", "解释TCP/IP协议的工作原理", "工程师", "中文", "困难", datetime.now(), None, 0)
]
# 执行批量插入操作
cursor.executemany(insert_query, fake_data)
# 提交事务
conn.commit()
# 打印影响的行数
print(f"{cursor.rowcount} row(s) inserted.")
# 关闭游标和连接
cursor.close()
conn.close()
3.查看csv文件的列名
import csv
# 打印 CSV 文件中的所有列名
with open('bishiti.csv', mode='r', encoding='utf-8') as file:
csv_reader = csv.DictReader(file)
print(csv_reader.fieldnames) # 打印列名
4.将csv文件中的数据插入到mysql中
import pymysql
import csv
from datetime import datetime
# 连接到MySQL数据库
conn = pymysql.connect(
host="localhost", # MySQL 主机
user="root", # MySQL 用户名
password="", # MySQL 密码
database="tiku" # 要连接的数据库
)
# 创建游标对象
cursor = conn.cursor()
# 插入数据的SQL语句
insert_query = """
INSERT INTO question_bank (id, subject, question_content, occupation, languages, difficulty, insert_time, update_time, is_deleted)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
"""
# 读取CSV文件,获取“考察对象”列的前十行数据
occupation_list = []
# 清理列名中的空格
with open('bishiti.csv', mode='r', encoding='utf-8') as file:
csv_reader = csv.DictReader(file)
csv_reader.fieldnames = [name.strip() for name in csv_reader.fieldnames] # 去掉列名的空格
for row in csv_reader:
occupation_list.append(row['考察对象']) # 使用去除空格后的列名
if len(occupation_list) >= 10:
break
# 检查是否获取到了至少10个考察对象
if len(occupation_list) < 10:
print("CSV文件中的考察对象列数据不足10行!")
exit()
# 生成假数据并插入
fake_data = [
(i+1, "数学基础", "计算两点之间的距离", occupation_list[i], "中文", "中等", datetime.now(), None, 0)
for i in range(10)
]
# 执行批量插入操作
cursor.executemany(insert_query, fake_data)
# 提交事务
conn.commit()
# 打印影响的行数
print(f"{cursor.rowcount} row(s) inserted.")
# 关闭游标和连接
cursor.close()
conn.close()
5.将修改好的表格数据和结构导出为sql文件
sudo mysqldump -u root -p --databases tiku3 --tables question_bank > ~/question_bank.sql
mv ~/question_bank.sql ./ # 移动到当前目录