Próbuję zaimportować plik CSV do tabeli SQLite.
Przykład CSV:
1,2
5,6
2,7
Przykładowe polecenie:
sqlite> create table foo(a, b);
sqlite> .separator ,
sqlite> .import test.csv foo
Error: test.csv line 1: expected 2 columns of data but found 4
Nie jestem nawet pewien, dlaczego znalazłby cztery kolumny z sześcioma danymi i dwiema kolumnami.
6 - 2 = 4
\r\n
w systemie Windows,\n
na * nix (obejmuje nowsze komputery Mac),\r
na starszych komputerach Mac.Odpowiedzi:
Co również jest powiedziane w komentarzach, SQLite widzi twoje dane wejściowe jako 1, 25, 62, 7. Miałem również problem, który w moim przypadku został rozwiązany przez zmianę "separatora" na ".mode csv". Możesz więc spróbować:
Pierwsze polecenie tworzy nazwy kolumn dla tabeli. Jeśli jednak chcesz, aby nazwy kolumn były dziedziczone z pliku csv, możesz po prostu zignorować pierwszą linię.
źródło
create table
polecenie, a sqlite użyje nazw kolumn z pliku csv.Year,Make,Model,Description,Price
a nie rzeczywiste dane. Jeśli tak jest w przypadku pliku CSV, nie musisz ręcznie tworzyć tabeli za pomocącreate table
polecenia..import
Polecenie użyje pierwszy wiersz w pliku do określenia nazwy kolumn i utworzyć tabelę odpowiednio. Nadal musisz dołączyć nazwę tabeli do polecenia. Te same informacje z dokumentacji SQLite ..mode
? Czy to nie tylko do wyjścia?type
nazwa kolumny CSV.Oto jak to zrobiłem.
Wprowadź powłokę sqlite bazy danych, do której mają zostać dodane dane
sqlite> .separator "\t" ---IMPORTANT! should be in double quotes sqlite> .import afile.csv tablename-to-import-to
źródło
.separator "\t" "\r"
Łączę tutaj informacje z poprzednich odpowiedzi z własnym doświadczeniem. Najłatwiej jest dodać oddzielone przecinkami nagłówki tabeli bezpośrednio do pliku csv, po którym następuje nowy wiersz, a następnie wszystkie dane csv.
Jeśli nigdy więcej nie będziesz robić rzeczy sqlite (tak jak ja), może to zaoszczędzić ci wyszukiwania w sieci lub dwóch:
W powłoce Sqlite wprowadź:
Jeśli nie masz zainstalowanego Sqlite na komputerze Mac, uruchom
Być może trzeba będzie przeprowadzić jedno wyszukiwanie w Internecie, aby dowiedzieć się, jak zainstalować Homebrew.
źródło
unescaped " character
alertami?przed poleceniem .import wpisz „.mode csv”
źródło
Jak zaimportować plik CSV do sqlite3
Utwórz bazę danych
Ustaw tryb i nazwę tabeli
Zaimportuj dane pliku CSV do sqlite3
Znajdź tabele
Znajdź schemat tabeli
Znajdź dane tabeli
Policz liczbę wierszy w tabeli
źródło
Z Termsql możesz to zrobić w jednej linii:
termsql -i mycsvfile.CSV -d ',' -c 'a,b' -t 'foo' -o mynewdatabase.db
źródło
Miałem dokładnie ten sam problem (na OS X Maverics 10.9.1 z SQLite3 3.7.13, ale nie sądzę, że SQLite ma związek z przyczyną). Próbowałem zaimportować dane csv zapisane z MS Excel 2011, co przy okazji. używa
';'
jako separatora kolumn. Dowiedziałem się, że plik csv z Excela nadal 9 razy używa znaku nowej linii z Mac OS, zmiana go na unix nowa linia rozwiązała problem. AFAIR BBEdit ma do tego polecenie, a także Sublime Text 2.źródło
tr -s '\r' '\n'
i będzie działać z wszelkiego rodzaju losowymi plikami.Wykonaj kroki:-
źródło
Jak podają niektóre strony internetowe i inne artykuły, wystarczy spojrzeć na ten. https://www.sqlitetutorial.net/sqlite-import-csv/
Nie musimy określać separatora
csv
pliku, ponieważ csv oznacza oddzielenie przecinkami.sqlite> .separator ,
nie ma potrzeby tej linii.To zadziała bez zarzutu :)
PS: Moje miasta.csv z nagłówkiem.
źródło
.save someFileName
w końcu biec . Znalezienie tego zajęło mi godzinę, aby ostatecznie wyeksportować to w pliku bazy danych pamięci na dysk 😅