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 ./ # 移动到当前目录

相关推荐
折哥的程序人生 · 物流技术专研3 小时前
Java面试85题图解版 · 特别篇:2026后端高频面试题复盘(算法底层逻辑+高并发架构设计全解析,附Java实战代码)
java·网络·数据库·算法·面试
AOwhisky3 小时前
Redis 学习笔记(第三期):持久化与主从复制
运维·数据库·redis·笔记·学习·云计算
李白的天不白3 小时前
数据库连接报错问题
数据库
一条泥憨鱼3 小时前
【Redis】数据类型和常用命令
java·数据库·redis·后端·缓存
爱喝水的鱼丶4 小时前
SAP-ABAP:SAP视图开发入门:四类标准视图的适用场景与创建步骤详解
服务器·数据库·性能优化·sap·abap
大白要努力!4 小时前
MySQL 8.0 + Navicat 完整操作指南
数据库·mysql
云絮.5 小时前
数据库操作
数据库·mysql·算法·oracle
小小工匠5 小时前
Redis 缓存替换策略:8 种淘汰策略与 LRU 实现剖析
数据库·redis·缓存
设计师小聂!7 小时前
宝塔 Linux 面板保姆级教程
linux·mysql·开源·运维开发