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 小时前
Minio使用
数据库
win x4 小时前
Redis 使用~如何在Java中连接使用redis
java·数据库·redis
迷枫7125 小时前
DM8 数据库安装实战:从零搭建达梦数据库环境(附全套工具链接)
数据库
XDHCOM5 小时前
PostgreSQL 25001: active_sql_transaction 报错原因分析,故障修复步骤详解,远程处理解决方案
数据库·sql·postgresql
卤炖阑尾炎6 小时前
PostgreSQL 日常运维全指南:从基础操作到备份恢复
运维·数据库·postgresql
daad7777 小时前
wifi_note
运维·服务器·数据库
计算机毕设vx_bysj68697 小时前
【免费领源码】77196基于java的手机银行app管理系统的设计与实现 计算机毕业设计项目推荐上万套实战教程JAVA,node.js,C++、python、大屏数据可视化
java·mysql·智能手机·课程设计
吴声子夜歌7 小时前
ES6——正则的扩展详解
前端·mysql·es6
xixingzhe27 小时前
Mysql统计空间增量
数据库·mysql
程序员萌萌8 小时前
Java之mysql实战讲解(三):聚簇索引与非聚簇索引
java·mysql·聚簇索引