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

无法通过Python将CSV数据集导入PostgreSQL的技术求助

问题分析与修复方案

你的代码存在以下关键错误:

  • 游标创建顺序错误:执行cur.execute前未初始化游标,会触发NameError
  • 缺失pandas导入语句:使用pd.read_csv但未声明import pandas as pd
  • 错误传递参数给open():open()需要文件路径字符串,而非pandas DataFrame对象
  • INSERT语句语法错误:未用占位符传递数据,直接写VALUES row不符合SQL规范
  • 列名拼写错误:建表时decription应为description
  • 未提交插入事务:循环插入后未执行conn.commit(),数据不会写入数据库

修正后的代码:

import psycopg2
import csv
import pandas as pd  # 补充缺失的pandas导入

# 建立数据库连接
conn = psycopg2.connect(
    database="dev", 
    user='postgres',
    host='localhost',
    password="1437",
    port=5432
)

# 先创建游标再执行SQL操作
cur = conn.cursor()

# 修正列名拼写错误
cur.execute("""CREATE TABLE info_v3(
            product_name varchar(50),
            product_id int PRIMARY KEY,
            description varchar(100));
            """)
conn.commit()

# 直接用文件路径打开CSV,无需先转成DataFrame
with open('../info_v2.csv', 'r') as f:
    reader = csv.reader(f)
    next(reader)  # 跳过表头行
    
    # 使用占位符传递参数,修正SQL语法同时避免注入风险
    for row in reader:
        cur.execute("INSERT INTO info_v3 VALUES (%s, %s, %s)", row)

# 提交所有插入操作
conn.commit()

# 关闭游标与连接
cur.close()
conn.close()

高效批量导入优化建议:

如果CSV数据量较大,建议使用PostgreSQL的copy_from方法,比逐行插入效率提升显著:

with open('../info_v2.csv', 'r') as f:
    next(f)  # 跳过表头
    cur.copy_from(f, 'info_v3', sep=',', columns=('product_name', 'product_id', 'description'))
conn.commit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:42:32