使用Postgress COPY导入CSV导入错误

时间:2017-08-24 14:55:39

标签: python postgresql csv

CSV文件很简单,如下所示:

CREATE TABLE public."csTest"
(
    idname character varying(200) COLLATE pg_catalog."default" NOT NULL DEFAULT nextval('seqtest'::regclass),
    channel0 double precision,
    channel1 double precision,
    channel2 double precision,
    channel3 double precision,
    channel4 double precision,
    CONSTRAINT "csTest_pkey" PRIMARY KEY (idname)
);

表格如下:

COPY public."csTest" FROM  '/file/on/server.csv' DELIMITER ',' CSV;

查询如下所示:

        conn = psycopg2.connect(
            "host="+host+" port="+port+" dbname="+dbname+
            " user="+user+" password="+password+""
        )

        cur = conn.cursor()
        cur.execute(query)
        conn.commit()
        conn.close()

所有这一切都是用简单的python脚本完成的,查询是失败的,我不知道为什么。但是,以防万一,这里是python代码,为了您的方便。

Controller:

 public ActionResult Index()
        {
            List<Student> ob = new List<Student>()
            {
                new Student{ id=1, Name="x"},
                new Student{ id=2, Name="y"},
            };
            return View(ob);
        }

Index:

@model List<WebApplication15.Controllers.Student>

@{
    ViewBag.Title = "Index";
}

@Html.Partial("Name",Model.OrderByDescending(x=>x.id))
<h2>Index</h2>

Partial View:
@model IEnumerable<WebApplication15.Controllers.Student>

@foreach (var student in Model)
{
    <li>@student.id</li>
    <li>@student.Name</li>
}
  

错误消息:psycopg2.DataError:类型为numeric的输入语法无效:   “CHANNEL0”

我错过了什么?

提前致谢。

1 个答案:

答案 0 :(得分:1)

COPY public."csTest" FROM  '/file/on/server.csv' DELIMITER ',' CSV HEADER;

应该这样做,因为它将第一行作为数据读取,而不是作为列名称,如果你没有指定它

<强>更新 我还预测numeric(10,10)和您的数据存在问题 - 也许您的意思是numeric (20,10)或类似的?... numeric(10,10)会接受0-0.9999999999范围