it-swarm-eu.dev

Wie liste ich die Tabellen in einer SQLite-Datenbankdatei auf, die mit ATTACH geöffnet wurde?

Mit welchem ​​SQL-Code können die Tabellen und die Zeilen in diesen Tabellen in einer SQLite-Datenbankdatei aufgelistet werden - nachdem ich sie mit dem Befehl ATTACH im SQLite 3-Befehlszeilentool angehängt habe?

1133
izb

Die Hilfefunktionen .tables und .schema untersuchen ATTACHed-Datenbanken nicht: Sie fragen einfach die Tabelle SQLITE_MASTER nach der "Hauptdatenbank" 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 mit .tables angezeigt werden: Dafür müssen Sie sqlite_temp_master auflisten:

SELECT name FROM sqlite_temp_master WHERE type='table';
540

Es gibt einige Schritte, um die Tabellen in einer SQLite-Datenbank anzuzeigen:

  1. Listen Sie die Tabellen in Ihrer Datenbank auf:

    .tables
    
  2. Listen Sie auf, wie die Tabelle aussieht:

    .schema tablename
    
  3. Drucken Sie die gesamte Tabelle aus:

    SELECT * FROM tablename;
    
  4. Listen Sie alle verfügbaren SQLite-Eingabeaufforderungsbefehle auf:

    .help
    
1245
Mark Janssen

Anscheinend müssen Sie die Tabelle sqlite_master wie folgt durchgehen:

SELECT * FROM dbname.sqlite_master WHERE type='table';

Und dann gehen Sie manuell durch jede Tabelle mit einem SELECT oder ähnlichem, um die Zeilen zu betrachten.

Die Befehle .DUMP und .SCHEMA scheinen die Datenbank überhaupt nicht zu sehen.

Um alle Tabellen anzuzeigen, verwenden Sie

SELECT name FROM sqlite_master WHERE type = "table"

Um alle Zeilen anzuzeigen, können Sie vermutlich alle Tabellen durchlaufen und jeweils ein SELECT * ausführen. Aber vielleicht ist ein DUMP das, wonach Sie suchen?

157

Verwenden Sie .help, um nach verfügbaren Befehlen zu suchen.

.table

Dieser Befehl würde alle Tabellen in Ihrer aktuellen Datenbank anzeigen.

68
Antony.H

Hierfür steht in der SQLite-Befehlszeile ein Befehl zur Verfügung:

.tables ?PATTERN?      List names of tables matching a LIKE pattern

Welche konvertiert in die folgende SQL:

SELECT name FROM sqlite_master
WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'
UNION ALL
SELECT name FROM sqlite_temp_master
WHERE type IN ('table','view')
ORDER BY 1
42
flubba

So listen Sie die Tabellen auf:

SELECT name FROM sqlite_master
WHERE type='table';
36
Rafał Dowgird

Versuchen Sie PRAGMA table_info(table-name);
http://www.sqlite.org/pragma.html#schema

30
Luiz Geron

Ich benutze diese Abfrage, um es zu bekommen:

SELECT name FROM sqlite_master WHERE type='table'

Und für iOS:

NSString *aStrQuery=[NSString stringWithFormat:@"SELECT name FROM sqlite_master WHERE type='table'"];
20
GameLoading

Laut Dokumentation ist das Äquivalent von MySQLs SHOW TABLES;:

Der Befehl ".tables" ähnelt dem Einstellen des Listenmodus und führt dann die folgende Abfrage aus:

SELECT name FROM sqlite_master
  WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'
UNION ALL
SELECT name FROM sqlite_temp_master
  WHERE type IN ('table','view')
ORDER BY 1;

Wenn Sie jedoch prüfen, ob eine einzelne Tabelle vorhanden ist (oder um deren Details abzurufen), lesen Sie @ LuizGeron answer.

16
Alix Axel

Ab den neuesten Versionen von SQLite 3 können Sie Folgendes ausgeben:

.fullschema

um alle Ihre create-Anweisungen zu sehen.

15
pepper

Der einfachste Weg, dies zu tun, besteht darin, die Datenbank direkt zu öffnen und den Befehl .dump zu verwenden, anstatt sie nach dem Aufrufen des SQLite 3-Shell-Tools anzuhängen.

Also ... (nimm an, dass die Eingabeaufforderung deines Betriebssystems $ ist) anstelle von $sqlite3:

sqlite3> ATTACH database.sqlite as "attached"

Öffnen Sie die Datenbank über die Befehlszeile Ihres Betriebssystems direkt:

$sqlite3 database.sqlite
sqlite3> .dump
12
Noah

Kombinieren Sie über einen union all alle Tabellen zu einer Liste.

select name
from sqlite_master 
where type='table'

union all 

select name 
from sqlite_temp_master 
where type='table'
9
openwonk

Verwenden:

import sqlite3

TABLE_LIST_QUERY = "SELECT * FROM sqlite_master where type='table'"
9

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 ein Windows-Betriebssystem verwenden und nicht wissen, wo sich die Befehls-Shell befindet, auf der SQLite-Site:

https://www.sqlite.org/download.html

Klicken Sie nach dem Herunterladen auf die Datei sqlite3.exe, um die SQLite-Befehls-Shell zu initialisieren . Bei der Initialisierung verwendet diese SQLite-Sitzung standardmäßig eine speicherinterne Datenbank und keine Datei auf dem Datenträger. Alle Änderungen gehen daher 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.

Das obige Beispiel bewirkt, dass die Datenbankdatei mit dem Namen "ex1.db" geöffnet und verwendet und erstellt wird, falls sie noch nicht vorhanden ist. Möglicherweise möchten Sie einen vollständigen Pfadnamen verwenden, um sicherzustellen, dass sich die Datei in dem Verzeichnis befindet, in dem Sie sich befinden. Verwenden Sie Schrägstriche als Trennzeichen für das Verzeichnis. Verwenden Sie mit anderen Worten "c: /work/ex1.db" und nicht "c:\work\ex1.db".

Geben Sie den Befehl . Tables ein, um alle Tabellen in der zuvor ausgewählten Datenbank anzuzeigen.

Wenn Sie unter Windows arbeiten, ist es möglicherweise hilfreich, diese Datei sqlite.exe in denselben Ordner wie die anderen Python -Dateien zu verschieben. Auf diese Weise befinden sich die Python -Datei, in die geschrieben wird, und die SQLite-Shell, die aus DB-Dateien liest, im selben Pfad.

7
oiyio

Das Kommando ".schema" listet die verfügbaren Tabellen und ihre Zeilen auf, indem es Ihnen die Anweisung anzeigt, 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); 
5
trf

.da um alle Datenbanken zu sehen - eine mit dem Namen 'main'

tabellen dieser Datenbank können von eingesehen werden

SELECT unterscheide 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. aa (, bb, cc ...) also:

SELECT unterscheide tbl_name von aa.sqlite_master order by 1;

Beachten Sie, dass Sie hier auch die Ansichten erhalten. Um diese auszuschließen, fügen Sie wobei type = 'table' vor 'order' ein

1
Klaas-Z4us-V