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

相关推荐
爱写代码的阿森1 小时前
鸿蒙三方库 | harmony-utils之KvUtil键值型数据库操作详解
数据库·华为·harmonyos·鸿蒙·huawei
Database_Cool_2 小时前
单机 MySQL 迁移到分布式数据库方便吗?阿里云 PolarDB-X 100% MySQL 协议兼容零改造平滑迁移
数据库·分布式·mysql
姜太小白2 小时前
【MySQL】 索引优化实战:解决 WHERE 等值 + IS NULL 查询,TEXT 字段报错 1167 的完整指南
数据库·mysql
窝子面3 小时前
手搓最简前后端协作-node
javascript·数据库
吳所畏惧3 小时前
宝塔面板Redis密码修改指南:SSH命令修改 vs 面板UI界面修改,哪个更靠谱?
运维·服务器·数据库·redis·缓存·ssh
DFT计算杂谈3 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
HPFBoy3 小时前
log4net 数据库存日志正确配置
数据库
liuxiaowei34 小时前
【绝版教程】新版MySQL DBA高级实战进阶班 MySQL8.0 姜承尧-腾讯数据库总监
数据库·mysql·dba
破碎的南瓜4 小时前
sqli--sql注入过关笔记(1,2,3,4,5,9)
数据库·笔记·sql