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 小时前
XML的简略知识点
xml·数据库·oracle
每天敲200行代码3 小时前
MySQL 事务管理
数据库·mysql·事务
巴里巴气4 小时前
MongoDB索引及其原理
数据库·mongodb
程序员勋勋14 小时前
Redis的String数据类型底层实现
数据库·redis·缓存
不修×蝙蝠4 小时前
MySQL 全详解:从入门到精通的实战指南
数据库·mysql·索引·最左前缀
我的ID配享太庙呀6 小时前
Django 科普介绍:从入门到了解其核心魅力
数据库·后端·python·mysql·django·sqlite
不辉放弃7 小时前
kafka的消费者负载均衡机制
数据库·分布式·kafka·负载均衡
拉姆哥的小屋7 小时前
用 Flask 打造宠物店线上平台:从 0 到 1 的全栈开发实践
数据库·oracle·flask
liliangcsdn7 小时前
mac neo4j install & verifcation
数据库·neo4j
Cyanto7 小时前
MyBatis-Plus高效开发实战
java·开发语言·数据库