Подтвердить что ты не робот

SQLite3 Импорт CSV и исключить/пропустить заголовок

Я пытаюсь получить мои файлы данных (из которых около дюжины или около того) в таблицы в SQLite. Каждый файл имеет заголовок, и я буду получать их несколько раз в течение следующего года, поэтому я хотел бы:

  • Избегайте редактирования каждого файла, чтобы удалить заголовок, когда я их получу;
  • Избегайте отката от сценариев оболочки или Python для этого.

Я определяю свою таблицу и импортирую данные...

> .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;
>

Я получил синтаксис для проверки равенства неправильно? Я не уверен; документы, похоже, не различают их. Я думал, что попробую еще раз...

> .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, поскольку строки заголовков в текстовых файлах являются довольно распространенной ситуацией.

4b9b3361

Ответ 1

patid - имя столбца.
"patid" - указанное имя столбца.
'patid' - это строка.

Условие WHERE patid = "patid" сравнивает значение в столбце patid с самим собой.

(SQLite позволяет использовать строки с двойными кавычками для совместимости с MySQL, но только там, где нельзя путать строку с именем таблицы/столбца.)

Ответ 2

импортировать CSV в новую таблицу и скопировать новые данные таблицы в исходную таблицу назначения, это будет работать?