SQLite3导入CSV&排除/跳过标题

时间:2012-11-27 15:19:16

标签: sqlite csv import

我正在尝试将我的数据文件(其中有十几个)放入SQLite中的表中。每个文件都有一个标题,我将在接下来的几年里收到它们几次,所以我想:

  1. 在收到标题时,请避免编辑每个文件以删除标题;
  2. 避免使用shell脚本或Python来执行此操作。
  3. 我定义了我的表并导入数据......

    > .separator "\t"
    > .headers on
    > CREATE TABLE clinical(
           patid      VARCHAR(20),
           eventdate  CHAR(10),
           sysdate    CHAR(10),
           constype   INT,
           consid     INT,
           medcode    INT,
           staffid    VARCHAR(20),
           textid     INT,
           episode    INT,
           enttype    INT,
           adid           INT);
    > .import "Sample_Clinical001.txt" clinical
    > SELECT * FROM clinical LIMIT 10;
    patid   eventdate   sysdate constype    consid  medcode staffid textid  episode enttype adid
    patid   eventdate   sysdate constype    consid  medcode staffid textid  episode enttype adid
    471001  30/01/1997  09/03/1997  4   68093   180 0   0   0   20  11484
    471001  30/01/1997  09/03/1997  2   68093   60  0   0   0   4   11485
    

    我的第一个想法是删除有问题的行,但这没有按预期工作,而是删除了整个表...

    > DELETE FROM clinical WHERE patid = "patid";
    > SELECT * FROM clinical LIMIT 3;
    >
    

    我是否弄错了测试等式的语法?我不确定; the docs似乎没有区分这两者。我以为我会再试一次......

    > .import "Sample_Clinical001.txt" clinical
    > SELECT * FROM clinical LIMIT 3;
    patid   eventdate   sysdate constype    consid  medcode staffid textid  episode enttype adid
    patid   eventdate   sysdate constype    consid  medcode staffid textid  episode enttype adid
    471001  30/01/1997  09/03/1997  4   68093   180 0   0   0   20  11484
    471001  30/01/1997  09/03/1997  2   68093   60  0   0   0   4   11485
    > DELETE FROM clinical WHERE patid == "patid";
    > SELECT * FROM clinical LIMIT 3;
    > 
    

    我是否在这里正确的轨道上,或者我做了一些愚蠢的事情?

    我原本希望有一个简单的选项可以在调用.import时跳过标题行,因为在文本文件中有标题行是一种相当常见的情况。

3 个答案:

答案 0 :(得分:7)

patid是列名。
"patid"是引用的列名 'patid'是一个字符串。

条件WHERE patid = "patid"会将patid列中的值与自身进行比较。

(SQLite允许带双引号的字符串与MySQL兼容,但仅限于字符串不能与表/列名混淆的地方。)

答案 1 :(得分:1)

这对我有用:

.read schema.sql
.mode csv
.import --skip 1 artist_t.csv artist_t

或者如果您只有一个文件要导入,则可以这样做:

.import --csv --skip 1 artist_t.csv artist_t

https://sqlite.org/cli.html#importing_csv_files

答案 2 :(得分:-1)

将csv导入到新表并将新表的数据复制到原始目标表,这行得通吗?