我试图用python脚本填充CSV文件中的一个表。
下面的SQL语句运行时没有错误:
COPY registro
FROM '/home/pablo/Escritorio/puntos/20140227.csv'
DELIMITER ','
CSV header;
CSV有头,并且使用header
参数,它导入时没有错误。
当我从python脚本执行它时,问题就来了。我发现不尝试导入头的唯一方法是使用copy_expert()
方法。我没有收到错误消息,但是在运行下面的Python脚本之后,表仍然是空的。
有什么线索吗?或者用其他方法从CSV中复制带有标题的表?
谢谢。
#/usr/bin/env python
# -*- coding: utf-8 -*-
import psycopg2
import os
import glob
DSN = "dbname=gps user=postgres host=localhost"
con = psycopg2.connect(DSN)
cur = con.cursor()
my_file = open('/home/pablo/Escritorio/puntos/20140227.csv')
#This is only a test file, not all the directory
sql = "COPY registro FROM stdin DELIMITER \',\' CSV header;"
cur.copy_expert(sql, my_file)
cur.close()
con.close()
我建议先用python处理csv文件。最好将从csv文件中提取的数据构造成行/列(在python中,这将是嵌套列表或元组列表),然后您可以基于该数据迭代地构造和执行SQL命令。
使用
csv
库与csv文件交互,查看此处的文档:https://docs.python.org/2/library/csv.html。它对用户非常友好,可以帮助你解决很多问题。这里有一种方法可以不用
csv
(因为我记不清头顶上的所有函数),但是最好不要使用这种方法:我会在
cur.copy_expert()
之后尝试con.commit()
。另外,如果数据集很大,我会避免像Sam p.上面指出的那样逐行预处理和上传文件。
cur.copy_expert()
明显更快。相关问题 更多 >
编程相关推荐