2011-03-26 80 views
0

我想跟着一个copy_from例子描述在stackoverflow但我修改一点,因为我需要从csv文件读取数据。下面的这个例子,我写了一个小程序,该文件是从存储在磁盘文件readed,然后从该文件中创建的表复制数据,我的代码是:从csv文件复制数据

def importFile(): 
    path = "C:\myfile.csv" 
    curs = conn.cursor() 
    curs.execute("Drop table if exists test_copy; ") 
    data = StringIO.StringIO() 
    data.write(path) 
    data.seek(0) 
    curs.copy_from(data, 'MyTable') 
    print("Data copied") 

,但我得到的错误,

psycopg2.DataError:无效输入整数的语法:

这是否意味着csv文件和我的表之间不匹配? OR是否足够用于复制csv文件?或者我需要更多的代码?我是新来的蟒蛇,所以任何帮助将不胜感激..

+0

它看起来像你的数据是在不同的格式比预期的PostgreSQL – pajton 2011-03-26 22:00:56

回答

2

看看你的.csv文件与文本编辑器。你要确保

  • 场分隔符是制表符
  • 没有引号字符
  • 没有标题行

如果这是真的,以下应该工作:

import psycopg2 

def importFromCsv(conn, fname, table): 
    with open(fname) as inf: 
     conn.cursor().copy_from(inf, table) 

def main(): 
    conn = ?? # set up database connection 
    importFromCsv(conn, "c:/myfile.csv", "MyTable") 
    print("Data copied") 

if __name__=="__main__": 
    main() 
+0

谢谢。但我期待复制csv文件所在的字段被分隔;每个字段都用双引号括起来。但我没有标题... – 2011-03-27 12:59:00

+0

如果CSV中的所有字段都在引号中,该怎么办? – Vladimir 2015-07-08 17:54:25