微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用python在postgres中复制(来自)带有heades的csv

我正在尝试用python脚本中的CSV文件填充表格.

随后的sql语句运行时没有错误

copY registro
FROM '/home/pablo/Escritorio/puntos/20140227.csv'
DELIMITER ','
CSV header;

CSV具有标头,并使用标头参数,导入时没有错误.

当我从我的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()

解决方法:

我会在cur.copy_expert()之后尝试con.commit().

另外,如果数据集很大,我会避免像Sam P.上面指出的那样逐行预处理和上传文件. cur.copy_expert()明显更快.

conn = psycopg2.connect('postgresql://scott:tiger@localhost:5432/database')
cur = conn.cursor()
copy_sql = """
           copY table_name FROM stdin WITH CSV HEADER
           DELIMITER as ','
           """
with open(path, 'r') as f:
    cur.copy_expert(sql=copy_sql, file=f)
    conn.commit()
    cur.close()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐