Einfache SQL Lite-Tabellen-/Importfrage
-
16-09-2020 - |
Frage
Ich habe eine einfache SQL-Frage.Ich möchte eine 3-Spalten-Datenbank erstellen und habe den folgenden Code:
sqlite3 meshdb.db "create table t1 (t1key INTEGER PRIMARY KEY, prideID, pubmedID);"
Wenn ich versuche, eine einfache CSV-Datei mit zwei Spalten (prideID und pubmedID) zu importieren, erhalte ich die Fehlermeldung „3 Datenspalten erwartet, aber 2 gefunden“.Ich möchte, dass der t1-Schlüssel eine Ganzzahl ist und automatisch hochgezählt wird, wenn neue Felder hinzugefügt werden.Muss ich NOT NULL vor PRIMARY KEY setzen, damit dies funktioniert?
Lösung
.import
unterstützt nicht das Umrennen des Eingangs (außer beim Einstellen des Separators).Sie müssen die CSV-Datei in eine temporäre Tabelle und den Einsatz in den echten Tisch importieren.Hier ist eine beispielhafte Sitzung:
Sie sehen, dass die ID aufgerechnet wird.Dies liegt daran, dass eine Spalte mit Typ Integer Primärschlüssel als Alias für den internen RowiD behandelt wird - was immer eine einzigartige, aufsteigende Zahl ist.
Andere Tipps
Anstatt insert
verwenden
create table newtable as select * from footmp;
Es ist besser und schneller.
mit der .version von sqlite ( sqlite 3.7.15.2 2013-01-09 ) Ich muss nicht zuerst in einen temporären Tisch importieren.Alles, was ich tat, war, sicherzustellen, dass ich einen Separator setze, bevor ich den Import startete.Ich habe die ID-Werte für jede Zeile angegeben, sodass meine erste Spalte in der CSV ein Satz von einzigartigen Ganzzahlen war