无法通过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
相关产品推荐
相关产品推荐

