Jak wyświetlić tabele w pliku bazy danych SQLite, który został otwarty za pomocą ATTACH?
1197
Jakiego SQL można użyć do wyświetlenia tabel i wierszy w tych tabelach w pliku bazy danych SQLite - po dołączeniu go za pomocą ATTACHpolecenia w narzędziu wiersza poleceń SQLite 3 ?
Poniższy jest przydatnym GUI dla sqlite, jeśli jesteś zainteresowany: sqlitestudio.pl Daje ci dostęp do przeglądania szczegółów baz danych, tabel, bardzo szybko i ma również ładny edytor zapytań ...
James Oravec
17
.tablesdla tabel i .schema ?TABLE?schematu konkretnej tabeli.
Funkcje „ .tablesi .schemapomocnik” nie sprawdzają DODATKOWYCH baz danych: po prostu sprawdzają SQLITE_MASTERtabelę w poszukiwaniu „głównej” bazy danych. W związku z tym, jeśli użyłeś
ATTACH some_file.db AS my_db;
musisz to zrobić
SELECT name FROM my_db.sqlite_master WHERE type='table';
Zwróć uwagę, że tabele tymczasowe nie są wyświetlane z .tables: musisz podać sqlite_temp_master:
SELECT name FROM sqlite_temp_master WHERE type='table';
"SELECT name FROM sqlite_master WHERE type='table'"Działa tylko dla mnie
vladkras,
3
WYBIERZ nazwę od my_db.sqlite_master GDZIE type = 'table'; To nie działa na mnie (na załączonym DB) i zgłasza błąd jako: Nie ma takiego stołu istnieje „my_db.sqlite_master”
Kanika
co masz na myśli przez tymczasowe stoły? Czy są jakieś, kiedy właśnie otworzyłem plik db SQLite?
Ewoks
Tabele tymczasowe to tabele utworzone za pomocą CREATE TEMPORARY TABLEpoleceń SQL. Ich zawartość jest usuwana po zamknięciu bieżącego połączenia z bazą danych i nigdy nie są zapisywane w pliku bazy danych.
Anthony Williams
1
W trybie komend sqlite3 i uruchom ATTACH "some_file.db" AS my_db; To działało!
John_J
1272
Istnieje kilka kroków, aby zobaczyć tabele w bazie danych SQLite:
Wyświetl tabele w bazie danych:
.tables
Wymień wygląd tabeli:
.schema tablename
Wydrukuj cały stół:
SELECT*FROM tablename;
Wyświetl wszystkie dostępne polecenia zachęty SQLite:
.tablei .tablesoba są dozwolone. W tym .taprzypadku działałoby również, ponieważ sqlite3 zaakceptuje każde polecenie, które jest jednoznaczne. Nazwa polecenia według pomocy to w rzeczywistości „.tabele” (jeśli ktoś nadal zwraca uwagę).
dbn
29
(To powinna być zaakceptowana odpowiedź, jest to najbardziej praktyczny sposób robienia rzeczy).
dbn
6
.tablesnie wyświetli tabel, jeśli otworzy się jedna baza danych, ATTACH '<path>' AS <name>;ale odpowiedź Lasse się spełni. odkąd OP wspomniał o ZAŁĄCZENIU, uważam, że miał rację, nie przyjmując tej odpowiedzi. edycja: właśnie zauważyłem, że Anthony i inni poniżej również to zauważyli.
antiplex
2
@dbw: Niepotrzebnie. Rozważ, że robisz opakowanie DB, które może korzystać z SQLite lub MySql (moja sprawa). Użycie większej liczby poleceń zgodnych z SQL ułatwiłoby przeniesienie opakowania w innych językach niż w przypadku użycia poleceń specyficznych dla dostawcy DB.
Valentin Heinitz
„... sqlite3 zaakceptuje każde polecenie, które jest jednoznaczne ...” Niestety czasami akceptuje także polecenia niejednoznaczne. Na przykład „.s” jest interpretowane jako „.show”, nawet jeśli „.schema”, „.separator” lub „.stats” również byłyby możliwe. A gdy nie akceptuje niejednoznacznego polecenia, nie podaje możliwości
442
Wygląda na to, że musisz przejść przez tabelę sqlite_master w następujący sposób:
SELECT*FROM dbname.sqlite_master WHERE type='table';
A następnie ręcznie przejrzyj każdą tabelę za pomocą SELECTlub podobnego, aby spojrzeć na rzędy.
Wydaje się, że polecenia .DUMPi w .SCHEMAogóle nie widzą bazy danych.
Nie jest to coś łatwego do odczytania lub zapamiętania do użytku w przyszłości; wbudowane .tablespolecenie jest bardziej intuicyjne
24
@Gryllida: pomimo tego można go używać z dowolnego interfejsu API języka SQL, ponieważ jest to prawidłowy kod SQL. Wbudowane polecenia mogą nie być obsługiwane wszędzie.
Valentin Heinitz,
2
@DoktorJ Czy .tableszmodyfikowano wyświetlanie tabel z dołączonej bazy danych?
Lasse V. Karlsen
4
W tej bazie danych tak, ale to pytanie dotyczyło wyświetlenia tabel w dołączonej bazie danych. Czy .tablespolecenie zostało zmodyfikowane, aby również je pokazać?
Lasse V. Karlsen
4
Doh! Czytanie ze zrozumieniem nie powiodło się ... Jakoś nie udało mi się złapać odniesienia ATTACH ... dwa razy> _ <
Doktor J
162
Aby wyświetlić wszystkie tabele, użyj
SELECT name FROM sqlite_master WHERE type ="table"
Aby pokazać wszystkie wiersze, myślę, że możesz iterować wszystkie tabele i po prostu wykonać SELECT * na każdym z nich. Ale może szukasz DUMP?
Dziwne, musi być poprawne, ale nie działa, gdy go używam
Jürgen K.
42
W wierszu poleceń SQLite dostępne jest do tego polecenie:
.tables ?PATTERN? List names of tables matching a LIKE pattern
Który konwertuje na następujący SQL:
SELECT name FROM sqlite_master
WHERE type IN('table','view')AND name NOTLIKE'sqlite_%'UNIONALLSELECT name FROM sqlite_temp_master
WHERE type IN('table','view')ORDERBY1
Więc ... cur.execute(""" SELECT name FROM sqlite_master WHERE type='table';""")czy nie? To nie działa dla mnie, ale nie jestem pewien, gdzie ten kod ma zostać uruchomiony.
Zgodnie z dokumentacją odpowiednikiem MySQL SHOW TABLES;jest:
Polecenie „.tables” jest podobne do ustawiania trybu listy, a następnie wykonania następującego zapytania:
SELECT name FROM sqlite_master
WHERE type IN('table','view')AND name NOTLIKE'sqlite_%'UNIONALLSELECT name FROM sqlite_temp_master
WHERE type IN('table','view')ORDERBY1;
Jeśli jednak sprawdzasz, czy istnieje jedna tabela (lub chcesz uzyskać szczegółowe informacje), zobacz odpowiedź @LuizGeron .
Wersja SQLite 3.7.13 2012-07-17 17:46:21 Wpisz „.help”, aby uzyskać instrukcje Wprowadź instrukcje SQL zakończone znakiem „;” sqlite> .fullschema Błąd: nieznane polecenie lub nieprawidłowe argumenty: „fullschema”. Wpisz „.help”, aby uzyskać pomoc
Mona Jalal
2
Używasz wersji z 2012 roku
pieprz
12
Najprostszym sposobem na to jest otwarcie bazy danych bezpośrednio i użycie .dumppolecenia, a nie dołączenie go po wywołaniu narzędzia powłoki SQLite 3.
Więc ... (załóżmy, że wiersz polecenia systemu operacyjnego to $) zamiast $sqlite3:
sqlite3> ATTACH database.sqlite as"attached"
Z poziomu wiersza poleceń systemu operacyjnego otwórz bazę danych bezpośrednio:
Możesz manipulować bazą danych za pomocą poleceń opisanych w tym łączu. Poza tym, jeśli używasz systemu operacyjnego Windows i nie wiesz, gdzie znajduje się powłoka poleceń, to jest na stronie SQLite:
Po pobraniu kliknij plik sqlite3.exe, aby zainicjować powłokę poleceń SQLite . Po zainicjowaniu domyślnie ta sesja SQLite używa bazy danych w pamięci, a nie pliku na dysku, więc wszystkie zmiany zostaną utracone po zakończeniu sesji. Aby użyć pliku dysku trwałego jako bazy danych, wprowadź polecenie „.open ex1.db” natychmiast po uruchomieniu okna terminala.
Powyższy przykład powoduje, że plik bazy danych o nazwie „ex1.db” jest otwierany i używany oraz tworzony, jeśli wcześniej nie istniał. Możesz użyć pełnej nazwy ścieżki, aby upewnić się, że plik znajduje się w katalogu, w którym go uważasz. Użyj ukośników jako znaku separatora katalogu. Innymi słowy użyj „c: /work/ex1.db”, a nie „c: \ work \ ex1.db”.
Aby zobaczyć wszystkie tabele w bazie danych, którą wcześniej wybrałeś, wpisz polecenie .tables zgodnie z powyższym linkiem.
Jeśli pracujesz w systemie Windows, myślę, że przydatne może być przeniesienie tego pliku sqlite.exe do tego samego folderu z innymi plikami Python. W ten sposób plik Python zapisuje, a powłoka SQLite czyta z plików .db w tej samej ścieżce.
.tables
dla tabel i.schema ?TABLE?
schematu konkretnej tabeli..table 'bank_%'
lub.table '%_empl'
też poprawna składnia zapytania o prefiksy / sufiksy!Odpowiedzi:
Funkcje „
.tables
i.schema
pomocnik” nie sprawdzają DODATKOWYCH baz danych: po prostu sprawdzająSQLITE_MASTER
tabelę w poszukiwaniu „głównej” bazy danych. W związku z tym, jeśli użyłeśmusisz to zrobić
Zwróć uwagę, że tabele tymczasowe nie są wyświetlane z
.tables
: musisz podaćsqlite_temp_master
:źródło
"SELECT name FROM sqlite_master WHERE type='table'"
Działa tylko dla mnieCREATE TEMPORARY TABLE
poleceń SQL. Ich zawartość jest usuwana po zamknięciu bieżącego połączenia z bazą danych i nigdy nie są zapisywane w pliku bazy danych.ATTACH "some_file.db" AS my_db;
To działało!Istnieje kilka kroków, aby zobaczyć tabele w bazie danych SQLite:
Wyświetl tabele w bazie danych:
Wymień wygląd tabeli:
Wydrukuj cały stół:
Wyświetl wszystkie dostępne polecenia zachęty SQLite:
źródło
.table
i.tables
oba są dozwolone. W tym.ta
przypadku działałoby również, ponieważ sqlite3 zaakceptuje każde polecenie, które jest jednoznaczne. Nazwa polecenia według pomocy to w rzeczywistości „.tabele” (jeśli ktoś nadal zwraca uwagę)..tables
nie wyświetli tabel, jeśli otworzy się jedna baza danych,ATTACH '<path>' AS <name>;
ale odpowiedź Lasse się spełni. odkąd OP wspomniał o ZAŁĄCZENIU, uważam, że miał rację, nie przyjmując tej odpowiedzi. edycja: właśnie zauważyłem, że Anthony i inni poniżej również to zauważyli.Wygląda na to, że musisz przejść przez tabelę sqlite_master w następujący sposób:
A następnie ręcznie przejrzyj każdą tabelę za pomocą
SELECT
lub podobnego, aby spojrzeć na rzędy.Wydaje się, że polecenia
.DUMP
i w.SCHEMA
ogóle nie widzą bazy danych.źródło
.tables
polecenie jest bardziej intuicyjne.tables
zmodyfikowano wyświetlanie tabel z dołączonej bazy danych?.tables
polecenie zostało zmodyfikowane, aby również je pokazać?Aby wyświetlić wszystkie tabele, użyj
Aby pokazać wszystkie wiersze, myślę, że możesz iterować wszystkie tabele i po prostu wykonać SELECT * na każdym z nich. Ale może szukasz DUMP?
źródło
Służy
.help
do sprawdzania dostępności poleceń.To polecenie wyświetla wszystkie tabele w bieżącej bazie danych.
źródło
W wierszu poleceń SQLite dostępne jest do tego polecenie:
Który konwertuje na następujący SQL:
źródło
Aby wyświetlić listę tabel, możesz także:
źródło
cur.execute(""" SELECT name FROM sqlite_master WHERE type='table';""")
czy nie? To nie działa dla mnie, ale nie jestem pewien, gdzie ten kod ma zostać uruchomiony.Wypróbuj
PRAGMA table_info(table-name);
http://www.sqlite.org/pragma.html#schema
źródło
Używam tego zapytania, aby je uzyskać:
I do użycia w iOS:
źródło
Zgodnie z dokumentacją odpowiednikiem MySQL
SHOW TABLES;
jest:Jeśli jednak sprawdzasz, czy istnieje jedna tabela (lub chcesz uzyskać szczegółowe informacje), zobacz odpowiedź @LuizGeron .
źródło
Od najnowszych wersji SQLite 3 możesz wydawać:
aby zobaczyć wszystkie swoje instrukcje tworzenia.
źródło
Najprostszym sposobem na to jest otwarcie bazy danych bezpośrednio i użycie
.dump
polecenia, a nie dołączenie go po wywołaniu narzędzia powłoki SQLite 3.Więc ... (załóżmy, że wiersz polecenia systemu operacyjnego to $) zamiast
$sqlite3
:Z poziomu wiersza poleceń systemu operacyjnego otwórz bazę danych bezpośrednio:
źródło
Za pomocą a
union all
połącz wszystkie tabele w jedną listę.źródło
Posługiwać się:
źródło
Ponieważ nikt nie wspomniał o oficjalnej referencji SQLite, myślę, że przydatne może być odwołanie się do niej pod tym nagłówkiem:
https://www.sqlite.org/cli.html
Możesz manipulować bazą danych za pomocą poleceń opisanych w tym łączu. Poza tym, jeśli używasz systemu operacyjnego Windows i nie wiesz, gdzie znajduje się powłoka poleceń, to jest na stronie SQLite:
https://www.sqlite.org/download.html
Po pobraniu kliknij plik sqlite3.exe, aby zainicjować powłokę poleceń SQLite . Po zainicjowaniu domyślnie ta sesja SQLite używa bazy danych w pamięci, a nie pliku na dysku, więc wszystkie zmiany zostaną utracone po zakończeniu sesji. Aby użyć pliku dysku trwałego jako bazy danych, wprowadź polecenie „.open ex1.db” natychmiast po uruchomieniu okna terminala.
Powyższy przykład powoduje, że plik bazy danych o nazwie „ex1.db” jest otwierany i używany oraz tworzony, jeśli wcześniej nie istniał. Możesz użyć pełnej nazwy ścieżki, aby upewnić się, że plik znajduje się w katalogu, w którym go uważasz. Użyj ukośników jako znaku separatora katalogu. Innymi słowy użyj „c: /work/ex1.db”, a nie „c: \ work \ ex1.db”.
Aby zobaczyć wszystkie tabele w bazie danych, którą wcześniej wybrałeś, wpisz polecenie .tables zgodnie z powyższym linkiem.
Jeśli pracujesz w systemie Windows, myślę, że przydatne może być przeniesienie tego pliku sqlite.exe do tego samego folderu z innymi plikami Python. W ten sposób plik Python zapisuje, a powłoka SQLite czyta z plików .db w tej samej ścieżce.
źródło
Komenda „.schema” wyświetli listę dostępnych tabel i ich wierszy, pokazując instrukcję użytą do utworzenia tych tabel:
źródło
.da, aby zobaczyć wszystkie bazy danych - jedną o nazwie „ main ”
tabele tej bazy danych są widoczne przez
WYBIERZ odrębną nazwę tbl_ od zamówienia sqlite_master o 1;
Załączone bazy danych wymagają prefiksów wybranych przez AS w instrukcji ATTACH, np. Aa (, bb, cc ...), aby:
WYBIERZ odrębną nazwę pliku tbl od aa.sqlite_master zamówienie o 1;
Zauważ, że tutaj również masz widoki. Aby je wykluczyć, dodaj where type = „table” przed „order”
źródło