【问题标题】:insert from CSV file to PostgreSQL table with integer values type使用整数值类型从 CSV 文件插入 PostgreSQL 表
【发布时间】:2018-01-18 08:57:56
【问题描述】:
  I want to insert data from a CSV file into a PostgreSQL table. The table 

结构如下。但我无法输入 INTEGER 类型的值。 它显示错误,例如- DataError:整数的无效输入语法:“vendor_phone” 第 1 行:...vendor_phone,vendor_address)VALUES ('vendor_name','vendor_ph...

如果我使用 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")

cursor = 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()

【问题讨论】:

  • 仔细查看错误信息,它说您插入的单词“vendor_phone”显然不是一个整数。听起来您有一个需要跳过的标题行。
  • 参考此链接.. 可能对您有帮助... (1) stackoverflow.com/questions/2987433/… (2)stackoverflow.com/questions/19400173/…
  • 我需要输入一个整数值....此外,我的代码还有一些部分-- header = next(vendor_data) rows = [header] + [[row[0], int(row[1]), row[2]] for row in vendor_data] for row in rows: cursor.execute("INSERT INTO vendor (vendor_name,vendor_phone,vendor_address)"\ "VALUES (%s,%??, %s)", 行)

标签: python postgresql csv integer psycopg2


【解决方案1】:

您可以使用以下语句代替光标,将数据直接从 CSV 加载到跳过 CSV 文件标题的表中

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

【讨论】:

  • 我需要插入一个整数值....进一步我编辑了我的代码的某些部分-- header = next(vendor_data) rows = [header] + [[row[0], int (row[1]), row[2]] for row in vendor_data] for row in rows: cursor.execute("INSERT INTO vendor (vendor_name,vendor_phone,vendor_address)"\ "VALUES (%s,%d,%s )", row) ----它给出错误 -ValueError: unsupported format character 'd' (0x64) at index %Id
  • 根据您的建议,我尝试了复制命令 - cursor.execute("COPY vendor_parts (vendor_id,part_book_id,time_id,total_sale) FROM 'D:\vendor_parts.csv' CSV HEADER;") -- --- 此查询在 shell 提示符下运行,但未在我的 python 代码中运行。显示错误 SyntaxError: EOL while scanning string literal----
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
  • 2023-03-23
相关资源
最近更新 更多