Wie liste ich die Tabellen in einer SQLite-Datenbankdatei auf, die mit ATTACH geöffnet wurde?
1197
Mit welchem SQL können die Tabellen und die Zeilen in diesen Tabellen in einer SQLite- Datenbankdatei aufgelistet werden - nachdem ich sie mit dem ATTACHBefehl im SQLite 3- Befehlszeilentool angehängt habe ?
Das Folgende ist eine nützliche GUI für SQLite, wenn Sie interessiert sind: sqlitestudio.pl Ermöglicht Ihnen den Zugriff auf die Details der Datenbanken, Tabellen, sehr schnell und hat auch einen netten Abfrage-Editor ...
James Oravec
17
.tablesfür Tabellen und .schema ?TABLE?für das Schema der jeweiligen Tabelle.
H6.
.table 'bank_%'oder .table '%_empl'auch gültige Syntax zum Abfragen von Präfixen / Suffixen!
Gavenkoa
Antworten:
576
Die Funktionen .tablesund und .schema"helper" untersuchen keine ATTACHed-Datenbanken. Sie fragen lediglich die SQLITE_MASTERTabelle nach der "main" -Datenbank ab. Folglich, wenn Sie verwendet haben
ATTACH some_file.db AS my_db;
dann musst du tun
SELECT name FROM my_db.sqlite_master WHERE type='table';
Beachten Sie, dass temporäre Tabellen auch nicht angezeigt werden .tables: Sie müssen dies auflisten sqlite_temp_master:
SELECT name FROM sqlite_temp_master WHERE type='table';
Funktioniert nur "SELECT name FROM sqlite_master WHERE type='table'"für mich
vladkras
3
SELECT name FROM my_db.sqlite_master WHERE type = 'table'; Dies funktioniert nicht für mich (für die angehängte Datenbank) und es wird ein Fehler ausgegeben als: Es gibt keine solche Tabelle "my_db.sqlite_master"
kanika
Was meinten Sie mit temporären Tabellen? Gibt es welche, als ich gerade die SQLite-Datenbankdatei geöffnet habe?
Ewoks
Temporäre Tabellen werden mit CREATE TEMPORARY TABLESQL-Befehlen erstellt. Ihr Inhalt wird gelöscht, wenn die aktuelle Datenbankverbindung geschlossen wird, und sie werden niemals in einer Datenbankdatei gespeichert.
Anthony Williams
1
Unter sqlite3 Befehlsmodus und ausführen ATTACH "some_file.db" AS my_db; Es hat funktioniert!
John_J
1272
Es gibt einige Schritte, um die Tabellen in einer SQLite-Datenbank anzuzeigen:
Listen Sie die Tabellen in Ihrer Datenbank auf:
.tables
Listen Sie auf, wie die Tabelle aussieht:
.schema tablename
Drucken Sie die gesamte Tabelle:
SELECT*FROM tablename;
Listen Sie alle verfügbaren SQLite-Eingabeaufforderungsbefehle auf:
.tableund .tablessind beide erlaubt. Im .taÜbrigen würde das auch funktionieren, da sqlite3 jeden Befehl akzeptiert, der eindeutig ist. Der Name des Befehls laut Hilfe ist in der Tat ".tables" (wenn noch jemand aufpasst).
dbn
29
(Dies sollte die akzeptierte Antwort sein, es ist die einfachste Art, Dinge zu tun).
dbn
6
.tableszeigt keine Tabellen an, wenn eine Datenbank geöffnet wurde, ATTACH '<path>' AS <name>;aber die Antwort von lasse reicht aus. Da das OP ATTACHing erwähnte, glaube ich, dass er Recht hatte, diese Antwort nicht zu akzeptieren. edit: habe gerade bemerkt, dass anthony und andere unten auch darauf hingewiesen haben.
Antiplex
2
@dbw: Nicht unbedingt. Angenommen, Sie führen einen DB-Wrapper aus, der SQLite oder MySql (mein Fall) verwenden kann. Die Verwendung von mehr SQL-konformen Befehlen würde es einfacher machen, die in andere Sprachen eingeschlossenen Befehle zu portieren, als wenn Sie herstellerspezifische DB-Befehle verwenden würden.
Valentin Heinitz
"... sqlite3 akzeptiert jeden Befehl, der eindeutig ist ..." Leider akzeptiert es manchmal auch mehrdeutige Befehle. Zum Beispiel wird ".s" als ".show" interpretiert, obwohl ".schema", ".separator" oder ".stats" ebenfalls Möglichkeiten wären. Und wenn es keinen mehrdeutigen Befehl akzeptiert, ist es dies listet die Möglichkeiten nicht auf.
442
Anscheinend müssen Sie die Tabelle sqlite_master folgendermaßen durchgehen :
SELECT*FROM dbname.sqlite_master WHERE type='table';
Und dann gehen Sie manuell jede Tabelle mit einem SELECToder ähnlichem durch, um die Zeilen zu betrachten.
Die Befehle .DUMPund .SCHEMAscheinen die Datenbank überhaupt nicht zu sehen.
Nicht leicht zu lesen oder für die zukünftige Verwendung zu merken; Der eingebaute .tablesBefehl ist intuitiver
24
@Gryllida: Trotzdem kann von jeder SQL-API verwendet werden, da es sich um valide SQL handelt. Integrierte Befehle werden möglicherweise nicht überall unterstützt.
Valentin Heinitz
2
@DoktorJ Wurden .tablesgeändert, um Tabellen aus einer angehängten Datenbank anzuzeigen?
Lasse V. Karlsen
4
In dieser Datenbank ja, aber bei dieser Frage ging es darum, die Tabellen in einer von Ihnen angehängten Datenbank anzuzeigen. Wurde der .tablesBefehl geändert, um auch diese anzuzeigen?
Lasse V. Karlsen
4
Doh! Leseverständnis fehlgeschlagen ... Ich habe es irgendwie geschafft, die ATTACH-Referenz nicht zu erfassen ... zweimal> _ <
Doktor J
162
Verwenden Sie, um alle Tabellen anzuzeigen
SELECT name FROM sqlite_master WHERE type ="table"
Um alle Zeilen anzuzeigen, können Sie wahrscheinlich alle Tabellen durchlaufen und für jede Zeile einfach ein SELECT * ausführen. Aber vielleicht ist ein DUMP das, wonach Sie suchen?
Vielen Dank für die einzige Antwort, die sich wirklich mit der Frage befasst hat ... "Welches SQL", nicht welcher Befehl verwendet werden kann ... danke!
Brad Parks
Außerdem wird ein Tabellenname pro Zeile gedruckt, während .tables mehrere Spalten mit Tabellennamen druckt (ärgerlich / nicht nützlich).
Shane
68
Verwenden Sie .helpdiese Option , um nach verfügbaren Befehlen zu suchen.
.table
Dieser Befehl zeigt alle Tabellen in Ihrer aktuellen Datenbank an.
Seltsam, es muss korrekt sein, funktioniert aber nicht, wenn ich es benutze
Jürgen K.
42
In der SQLite-Befehlszeile steht hierfür ein Befehl zur Verfügung:
.tables ?PATTERN? List names of tables matching a LIKE pattern
Welches konvertiert in die folgende 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
Also ... cur.execute(""" SELECT name FROM sqlite_master WHERE type='table';""")oder nein? Das funktioniert bei mir nicht, aber ich bin mir nicht sicher, wo dieser Code ausgeführt werden soll.
Laut Dokumentation ist das Äquivalent von MySQLs SHOW TABLES;:
Der Befehl ".tables" ähnelt dem Festlegen des Listenmodus und dem Ausführen der folgenden Abfrage:
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;
SQLite Version 3.7.13 2012-07-17 17:46:21 Geben Sie ".help" für Anweisungen ein. Geben Sie SQL-Anweisungen ein, die mit einem ";" sqlite> .fullschema Fehler: unbekannter Befehl oder ungültige Argumente: "fullschema". Geben Sie ".help" für Hilfe ein
Mona Jalal
2
Sie verwenden eine Version von 2012
Pfeffer
12
Der einfachste Weg, dies zu tun, besteht darin, die Datenbank direkt zu öffnen und den .dumpBefehl zu verwenden, anstatt ihn nach dem Aufrufen des SQLite 3-Shell-Tools anzuhängen.
Also ... (Angenommen, Ihre OS-Befehlszeile lautet $) anstelle von $sqlite3:
sqlite3> ATTACH database.sqlite as"attached"
Öffnen Sie die Datenbank über die Befehlszeile Ihres Betriebssystems direkt:
Sie können Ihre Datenbank mit den in diesem Link beschriebenen Befehlen bearbeiten. Außerdem , wenn Sie Windows - Betriebssystem verwenden und nicht wissen , wo der Kommando - Shell ist, das ist in der Website SQLite:
Nach dem Download klicken sqlite3.exe Datei , um die SQLite - Befehls - Shell zu initialisieren . Bei der Initialisierung verwendet diese SQLite-Sitzung standardmäßig eine speicherinterne Datenbank und keine Datei auf der Festplatte. Daher gehen alle Änderungen verloren, wenn die Sitzung beendet wird. Um eine persistente Festplattendatei als Datenbank zu verwenden, geben Sie unmittelbar nach dem Start des Terminalfensters den Befehl ".open ex1.db" ein.
Im obigen Beispiel wird die Datenbankdatei mit dem Namen "ex1.db" geöffnet und verwendet und erstellt, wenn sie zuvor nicht vorhanden war. Möglicherweise möchten Sie einen vollständigen Pfadnamen verwenden, um sicherzustellen, dass sich die Datei in dem Verzeichnis befindet, in dem sie sich Ihrer Meinung nach befindet. Verwenden Sie Schrägstriche als Verzeichnistrennzeichen. Mit anderen Worten, verwenden Sie "c: /work/ex1.db", nicht "c: \ work \ ex1.db".
Geben Sie den Befehl .tables ein, um alle Tabellen in der zuvor ausgewählten Datenbank anzuzeigen, wie im obigen Link angegeben.
Wenn Sie unter Windows arbeiten, ist es möglicherweise hilfreich, diese Datei sqlite.exe mit den anderen Python-Dateien in denselben Ordner zu verschieben. Auf diese Weise schreibt die Python-Datei in und die SQLite-Shell liest aus DB-Dateien und befindet sich im selben Pfad.
Das Kommando ".schema" listet die verfügbaren Tabellen und ihre Zeilen auf, indem es Ihnen die Anweisung zeigt, mit der diese Tabellen erstellt wurden:
sqlite> create table_a (id int, a int, b int);
sqlite> .schema table_a
CREATE TABLE table_a (id int, a int, b int);
.tables
für Tabellen und.schema ?TABLE?
für das Schema der jeweiligen Tabelle..table 'bank_%'
oder.table '%_empl'
auch gültige Syntax zum Abfragen von Präfixen / Suffixen!Antworten:
Die Funktionen
.tables
und und.schema
"helper" untersuchen keine ATTACHed-Datenbanken. Sie fragen lediglich dieSQLITE_MASTER
Tabelle nach der "main" -Datenbank ab. Folglich, wenn Sie verwendet habendann musst du tun
Beachten Sie, dass temporäre Tabellen auch nicht angezeigt werden
.tables
: Sie müssen dies auflistensqlite_temp_master
:quelle
"SELECT name FROM sqlite_master WHERE type='table'"
für michCREATE TEMPORARY TABLE
SQL-Befehlen erstellt. Ihr Inhalt wird gelöscht, wenn die aktuelle Datenbankverbindung geschlossen wird, und sie werden niemals in einer Datenbankdatei gespeichert.ATTACH "some_file.db" AS my_db;
Es hat funktioniert!Es gibt einige Schritte, um die Tabellen in einer SQLite-Datenbank anzuzeigen:
Listen Sie die Tabellen in Ihrer Datenbank auf:
Listen Sie auf, wie die Tabelle aussieht:
Drucken Sie die gesamte Tabelle:
Listen Sie alle verfügbaren SQLite-Eingabeaufforderungsbefehle auf:
quelle
.table
und.tables
sind beide erlaubt. Im.ta
Übrigen würde das auch funktionieren, da sqlite3 jeden Befehl akzeptiert, der eindeutig ist. Der Name des Befehls laut Hilfe ist in der Tat ".tables" (wenn noch jemand aufpasst)..tables
zeigt keine Tabellen an, wenn eine Datenbank geöffnet wurde,ATTACH '<path>' AS <name>;
aber die Antwort von lasse reicht aus. Da das OP ATTACHing erwähnte, glaube ich, dass er Recht hatte, diese Antwort nicht zu akzeptieren. edit: habe gerade bemerkt, dass anthony und andere unten auch darauf hingewiesen haben.Anscheinend müssen Sie die Tabelle sqlite_master folgendermaßen durchgehen :
Und dann gehen Sie manuell jede Tabelle mit einem
SELECT
oder ähnlichem durch, um die Zeilen zu betrachten.Die Befehle
.DUMP
und.SCHEMA
scheinen die Datenbank überhaupt nicht zu sehen.quelle
.tables
Befehl ist intuitiver.tables
geändert, um Tabellen aus einer angehängten Datenbank anzuzeigen?.tables
Befehl geändert, um auch diese anzuzeigen?Verwenden Sie, um alle Tabellen anzuzeigen
Um alle Zeilen anzuzeigen, können Sie wahrscheinlich alle Tabellen durchlaufen und für jede Zeile einfach ein SELECT * ausführen. Aber vielleicht ist ein DUMP das, wonach Sie suchen?
quelle
Verwenden Sie
.help
diese Option , um nach verfügbaren Befehlen zu suchen.Dieser Befehl zeigt alle Tabellen in Ihrer aktuellen Datenbank an.
quelle
In der SQLite-Befehlszeile steht hierfür ein Befehl zur Verfügung:
Welches konvertiert in die folgende SQL:
quelle
So listen Sie die Tabellen auf:
quelle
cur.execute(""" SELECT name FROM sqlite_master WHERE type='table';""")
oder nein? Das funktioniert bei mir nicht, aber ich bin mir nicht sicher, wo dieser Code ausgeführt werden soll.Versuchen Sie es mit
PRAGMA table_info(table-name);
http://www.sqlite.org/pragma.html#schema
quelle
Ich benutze diese Abfrage, um es zu bekommen:
Und zur Verwendung in iOS:
quelle
Laut Dokumentation ist das Äquivalent von MySQLs
SHOW TABLES;
:Wenn Sie jedoch überprüfen, ob eine einzelne Tabelle vorhanden ist (oder deren Details abgerufen werden sollen ), lesen Sie die Antwort von @LuizGeron .
quelle
Ab den neuesten Versionen von SQLite 3 können Sie Folgendes ausgeben:
um alle Ihre create-Anweisungen zu sehen.
quelle
Der einfachste Weg, dies zu tun, besteht darin, die Datenbank direkt zu öffnen und den
.dump
Befehl zu verwenden, anstatt ihn nach dem Aufrufen des SQLite 3-Shell-Tools anzuhängen.Also ... (Angenommen, Ihre OS-Befehlszeile lautet $) anstelle von
$sqlite3
:Öffnen Sie die Datenbank über die Befehlszeile Ihres Betriebssystems direkt:
quelle
Via ein
union all
, kombiniert alle Tabellen in eine Liste.quelle
Verwenden:
quelle
Da niemand über die offizielle Referenz von SQLite gesprochen hat, halte ich es für nützlich, unter dieser Überschrift darauf zu verweisen:
https://www.sqlite.org/cli.html
Sie können Ihre Datenbank mit den in diesem Link beschriebenen Befehlen bearbeiten. Außerdem , wenn Sie Windows - Betriebssystem verwenden und nicht wissen , wo der Kommando - Shell ist, das ist in der Website SQLite:
https://www.sqlite.org/download.html
Nach dem Download klicken sqlite3.exe Datei , um die SQLite - Befehls - Shell zu initialisieren . Bei der Initialisierung verwendet diese SQLite-Sitzung standardmäßig eine speicherinterne Datenbank und keine Datei auf der Festplatte. Daher gehen alle Änderungen verloren, wenn die Sitzung beendet wird. Um eine persistente Festplattendatei als Datenbank zu verwenden, geben Sie unmittelbar nach dem Start des Terminalfensters den Befehl ".open ex1.db" ein.
Im obigen Beispiel wird die Datenbankdatei mit dem Namen "ex1.db" geöffnet und verwendet und erstellt, wenn sie zuvor nicht vorhanden war. Möglicherweise möchten Sie einen vollständigen Pfadnamen verwenden, um sicherzustellen, dass sich die Datei in dem Verzeichnis befindet, in dem sie sich Ihrer Meinung nach befindet. Verwenden Sie Schrägstriche als Verzeichnistrennzeichen. Mit anderen Worten, verwenden Sie "c: /work/ex1.db", nicht "c: \ work \ ex1.db".
Geben Sie den Befehl .tables ein, um alle Tabellen in der zuvor ausgewählten Datenbank anzuzeigen, wie im obigen Link angegeben.
Wenn Sie unter Windows arbeiten, ist es möglicherweise hilfreich, diese Datei sqlite.exe mit den anderen Python-Dateien in denselben Ordner zu verschieben. Auf diese Weise schreibt die Python-Datei in und die SQLite-Shell liest aus DB-Dateien und befindet sich im selben Pfad.
quelle
Das Kommando ".schema" listet die verfügbaren Tabellen und ihre Zeilen auf, indem es Ihnen die Anweisung zeigt, mit der diese Tabellen erstellt wurden:
quelle
.da, um alle Datenbanken anzuzeigen - eine mit dem Namen ' main '
Tabellen dieser Datenbank können von eingesehen werden
SELECT unterscheidet tbl_name von sqlite_master um 1;
Die angehängten Datenbanken benötigen Präfixe, die Sie mit AS in der Anweisung ATTACH ausgewählt haben, z. B. aa (, bb, cc ...).
SELECT unterscheidet tbl_name von aa.sqlite_master um 1;
Beachten Sie, dass Sie hier auch die Ansichten erhalten. Um diese auszuschließen, fügen Sie hinzu, wobei type = 'table' vor 'order' steht.
quelle