You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python解析CSV的Full_name列并插入SQL数据库遇无输出问题求助

解决Python解析CSV姓名并插入SQL数据库的问题

首先,你的代码里有几个关键问题导致没有输出且功能失效,我逐一给你拆解:

  • 缺少sys模块导入:代码里用到了sys.argv和sys.exit(),但没有开头导入import sys,这会直接触发报错
  • 错误的嵌套循环:外层已经用for row in reader遍历CSV行,内层又写了for name in reader,这会把CSV读取器的指针直接移到文件末尾,外层循环根本不会执行
  • 姓名拆分逻辑错误:你直接用len(name)判断的是字符串长度,不是单词数量;而且没有用split()方法拆分姓名成单词列表,name[0]取的是字符串第一个字符,不是第一个名字
  • print语法错误:Python里不能用print(first_name = name[0])这种赋值式打印,应该先赋值变量再打印,或者用格式化字符串
  • 数据库操作位置错误:db.execute()放在了循环外面,而且没有定义数据库连接、没有提交事务,也用错了变量(row["first_name"]不存在,应该用拆分后的变量)

修正后的完整代码

import csv
import sys
# 这里以sqlite3为例,如果你用MySQL/PostgreSQL等,替换对应数据库的导入和连接代码
import sqlite3

if __name__ == '__main__':
    if len(sys.argv) != 2:
        print("Please enter the csv file too: python name_parsing.py student_info.csv")
        sys.exit()
    
    # 初始化数据库连接
    conn = sqlite3.connect('student_names.db')
    db = conn.cursor()
    
    # 提前创建表(如果还不存在的话)
    db.execute('''CREATE TABLE IF NOT EXISTS name
                 (first TEXT, middle TEXT, last TEXT)''')
    
    with open(sys.argv[1], "r") as file:
        reader = csv.DictReader(file)
        for row in reader:
            full_name = row["Full_name"].strip()  # 去除姓名前后的空格
            name_parts = full_name.split()  # 按空格拆分姓名为单词列表
            first_name = None
            middle_name = None
            last_name = None
            
            if len(name_parts) == 2:
                first_name = name_parts[0]
                last_name = name_parts[1]
                print(f"拆分结果: First={first_name}, Middle={middle_name}, Last={last_name}")
            elif len(name_parts) == 3:
                first_name = name_parts[0]
                middle_name = name_parts[1]
                last_name = name_parts[2]
                print(f"拆分结果: First={first_name}, Middle={middle_name}, Last={last_name}")
            else:
                # 处理姓名不是2或3个词的情况,可选跳过或记录警告
                print(f"警告: 姓名「{full_name}」不符合2/3词格式,跳过该行")
                continue
            
            # 插入数据库
            db.execute("INSERT INTO name (first, middle, last) VALUES(?,?,?)", 
                       (first_name, middle_name, last_name))
    
    # 提交事务并关闭连接,确保数据写入数据库
    conn.commit()
    conn.close()
    print("所有有效数据已成功插入数据库!")

额外说明

  • 如果你的数据库不是SQLite,比如MySQL,需要替换成对应的连接方式(比如使用mysql-connector-python库)
  • 增加了strip()处理姓名前后空格,避免拆分出空字符串
  • 补充了非标准格式姓名的处理逻辑,防止程序崩溃
  • 数据库操作必须放在循环内,每处理一行就插入一行,最后一定要执行conn.commit(),否则数据不会真正写入数据库

内容的提问来源于stack exchange,提问作者speedy_catch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 10:32:29