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

StackOverflow https://stackoverflow.com/questions/82875

  •  01-07-2019
  •  | 
  •  

Frage

Mit welcher SQL kann die Tabellen aufgelistet werden, und die Zeilen in diesen Tabellen in einer SQLite -Datenbankdatei - sobald ich sie mit dem angehängt habe ATTACH Befehl im SQLite 3 -Befehlszeilenwerkzeug?

War es hilfreich?

Lösung

Das .tables, und .schema "Helfer" -Funktionen untersuchen nicht in angehängte Datenbanken: Sie fragen einfach die SQLITE_MASTER Tabelle für die "Haupt" -Datenbank. 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 nicht angezeigt werden .tables Entweder: Sie müssen auflisten sqlite_temp_master dafür:

SELECT name FROM sqlite_temp_master WHERE type='table';

Andere Tipps

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:

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

    .help
    

Es scheint, dass Sie die durchgehen müssen sqlite_master Tabelle wie diese:

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

Und dann manuell durch jeden Tisch mit einem durchgehen SELECT oder ähnlich wie die Reihen.

Das .DUMP und .SCHEMA Befehle scheint die Datenbank überhaupt nicht zu sehen.

Verwenden Sie um alle Tische zu zeigen

SELECT name FROM sqlite_master WHERE type = "table"

Um alle Zeilen zu zeigen, können Sie wohl alle Tabellen durchführen und einfach einen ausgewählten * auf jedem einzelnen durchführen. Aber vielleicht ist eine Müllkippe das, wonach Sie suchen?

Verwenden .help nach verfügbaren Befehlen zu überprüfen.

.table

In diesem Befehl würde alle Tabellen unter Ihrer aktuellen Datenbank angezeigt.

Hierfür ist ein Befehl in der SQLite -Befehlszeile verfügbar:

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

Die in die folgenden SQL konvertiert:

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

So listen Sie die Tabellen auf, die Sie auch tun können:

SELECT name FROM sqlite_master
WHERE type='table';

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

Ich benutze diese Abfrage, um sie zu bekommen:

SELECT name FROM sqlite_master WHERE type='table'

Und in iOS zu verwenden:

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

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

Der Befehl ".tables" ähnelt dem Einstellungslistenmodus und wird dann die folgende Abfrage ausführen:

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 überprüfen, ob eine einzelne Tabelle vorliegt (oder ihre Details erhalten), siehe @Luizgeron Antworten.

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

.fullschema

um alle Ihre Erstellen von Aussagen zu sehen.

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

Also ... (Angenommen, Ihre OS -Befehlszeile ist $ $) anstelle von $sqlite3:

sqlite3> ATTACH database.sqlite as "attached"

Öffnen Sie die Datenbank in Ihrer OS -Befehlszeile direkt:

$sqlite3 database.sqlite
sqlite3> .dump

Verwenden:

import sqlite3

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

Über ein union all, Kombinieren Sie alle Tabellen in einer Liste.

select name
from sqlite_master 
where type='table'

union all 

select name 
from sqlite_temp_master 
where type='table'

Da niemand über die offizielle Referenz von SQLite erwähnt hat, denke ich, dass es nützlich sein kann, unter dieser Überschrift darauf zu verweisen:

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

Sie können Ihre Datenbank mit den in diesem Link beschriebenen Befehlen manipulieren. Neben, Wenn Sie Windows OS verwenden Und wissen Sie nicht, wo sich die Befehlsschale befindet, das sich auf der Site des SQLite befindet:

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

Nach dem Herunterladen, Klicken Sie auf SQLite3.exe -Datei, um die SQLite -Befehlsschale zu initialisieren. Wenn es initialisiert wird, verwendet diese SQLite-Sitzung standardmäßig eine In-Memory-Datenbank, nicht eine Datei auf der Festplatte, und so gehen alle Änderungen beim Ablauf der Sitzung verloren. Um eine persistente Festplattendatei als Datenbank zu verwenden, geben Sie den Befehl ".open ex1.db" unmittelbar nach dem Start des Terminals ein.

Das obige Beispiel führt dazu, dass die Datenbankdatei mit dem Namen "ex1.db" geöffnet und verwendet und erstellt wird, wenn sie zuvor nicht vorhanden ist. Möglicherweise möchten Sie einen vollständigen Pfadnamen verwenden, um sicherzustellen, dass sich die Datei im Verzeichnis befindet, in dem sie glauben. Verwenden Sie die Vorwärtsspeisen als Verzeichnistrennzeichen. Mit anderen Worten verwenden "c: /work/ex1.db", nicht "c: work ex1.db".

Um alle Tabellen in der zuvor ausgewählten Datenbank anzuzeigen, geben Sie den Befehl ein .tabelle Wie es in der obigen Verbindung gesagt wird.

Wenn Sie in Windows arbeiten, denke ich, dass es möglicherweise nützlich ist, diese SQLite.exe -Datei mit den anderen Python -Dateien in denselben Ordner zu verschieben. Auf diese Weise schreibt die Python -Datei an und die SQLite Shell liest aus .db -Dateien auf demselben Weg.

Das Kommando ".Schema" listet die verfügbaren Tabellen und ihre Zeilen auf, indem Sie Ihnen die Erstellung dieser Tabellen anzeigen:

sqlite> create table_a (id int, a int, b int);
sqlite> .schema table_a
CREATE TABLE table_a (id int, a int, b int);

.Da, um alle Datenbanken zu sehen - eine namens ''hauptsächlich'

Tabellen dieser Datenbank können von sehen

Wählen Sie eindeutig TBL_NAME aus sqlite_master order für 1;

Die beigefügten Datenbanken benötigen Präfixe, mit denen Sie ausgewählt wurden, wie in der Anweisung anhängen EG aa (, BB, CC ...) Also:

Wählen Sie einen unterschiedlichen tbl_name aus aa.sqlite_master Ordnung um 1;

Beachten Sie, dass Sie hier auch die Ansichten erhalten. Um diese hinzuzufügen wobei type = 'table' ' vor Bestellung'

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top