2017-08-10 92 views
0
I want to insert data from a CSV file into a PostgreSQL table. The table 

结构如下。但是我无法给出INTEGER类型值的输入。 它表示错误喜欢 - DataError:无效输入语法整数: “vendor_phone” LINE 1:... vendor_phone,vendor_address)VALUES( 'VENDOR_NAME','vendor_ph ...从CSV文件插入到整数值类型的PostgreSQL表

它是工作正常,如果我用VARCHAR类型,但我需要使用整数值。

CREATE TABLE vendors (
     vendor_id SERIAL PRIMARY KEY, 
     vendor_name VARCHAR(100) NOT NULL, 
     vendor_phone INTEGER, 
     vendor_address VARCHAR(255) NOT NULL 
    ) 

import psycopg2 
    import csv 

    database = psycopg2.connect (database = "supplier", user="postgres", password="1234", host="localhost", port="5432") 

光标= database.cursor()

vendor_data = csv.reader(open('vendors.csv'),delimiter=',') 

    for row in vendor_data: 

     cursor.execute("INSERT INTO vendors (vendor_name,vendor_phone,vendor_address)"\ 
      "VALUES (%s,%s,%s)", 
      row) 

    print("CSV data imported") 

    cursor.close() 
    database.commit() 
    database.close() 
+0

看仔细错误信息,它说你要插入单词“ vendor_phone“,这显然不是一个整数。这听起来像你有一个标题行,你需要跳过。 – IMSoP

+0

请参阅此链接..可能对您有所帮助... (1)https://stackoverflow.com/questions/2987433/how-to-import-csv-file-data-into-a-postgresql-table (2)https://stackoverflow.com/questions/19400173/how-should-i-import-data-from-csv-into-a-postgres-table-using-pgadmin-3 –

+0

我需要输入整数值....此外,我有一些我的代码 - header = next(vendor_data) rows = [header] + [[row [0],int(row [1]),row [2] (供应商名称,vendor_phone,vendor_address)“ ”VALUES(%s,%??,%s)“, row) – Neepa

回答

0

代替光标,你可以使用下面的语句直接从CSV数据加载到表,跳过CSV的头文件

COPY vendors (vendor_name,vendor_phone,vendor_address) FROM 'vendors.csv' CSV HEADER; 
+0

我需要我插入一个整数值....此外,我编辑了我的代码的一部分 - header = next(vendor_data) rows = [header] + [[row [0],int(row [1]),row [2 ]在vendor_data行] 为行中的行: cursor.execute( “INSERT INTO供应商(VENDOR_NAME,vendor_phone,vendor_address)” \ “VALUES(%S,%d,%S)”, 行) ----它给出错误-ValueError:不支持的格式字符'd'(0x64)在索引%Id – Neepa

+0

%d。你尝试过COPY命令吗? –

+0

从您的建议我已尝试复制命令 cursor.execute(“COPY vendor_parts (vendor_id,part_book_id,time_id,total_sale) FROM'D:\ vendor_parts.csv'CSV HEADER;”)----- This查询正在shell提示符下运行,但未在我的python代码中运行。显示错误SyntaxError:扫描字符串时的EOL ---- – Neepa