Ich schlage vor, die Frage in etwas umzubenennen, das nicht Python-spezifisch ist, da die Antwort für Schnittstellen, die SQL verwenden, eigentlich universell ist.
Unode
2
Stimmt, obwohl ich auf Nachfrage eine Python-API erwartet hatte. Ich werde versuchen, den richtigen Namen zu finden.
Noamtm
3
Wenn Sie Tabellen an der Eingabeaufforderung von sqlite3 anzeigen möchten, lesen Sie stackoverflow.com/questions/82875/… . Wenn Sie das Python-Paket sqlite3 verwenden, lesen Sie hier die Antwort von Davoud Taghawi-Nejad. Ich schlage vor, dass das OP Python wieder in den Fragentitel einfügt und Davouds Antwort auswählt. Ich habe diese Seite gefunden, indem ich "show tables Python sqlite3" gegoogelt habe, da Google den alten Fragentitel kennt. Suchen innerhalb von SO würden hier nicht landen. Ohne den Python-Winkel hat die verknüpfte doppelte Frage 82875 weitaus mehr Weisheit erhalten.
Bennett Brown
Antworten:
106
Sie können die Liste der Tabellen und Schemata abrufen, indem Sie die Tabelle SQLITE_MASTER abfragen:
sqlite>.tab
job snmptarget t1 t2 t3
sqlite>select name from sqlite_master where type ='table';
job
t1
t2
snmptarget
t3
sqlite>.schema job
CREATE TABLE job (
id INTEGER PRIMARY KEY,
data VARCHAR
);
sqlite>select sql from sqlite_master where type ='table'and name ='job';
CREATE TABLE job (
id INTEGER PRIMARY KEY,
data VARCHAR
)
@ jbuddy_13 sqlite>ist die SQLite-Befehlszeilen-Client-Eingabeaufforderung. Der Zweck des Beispiels war es zu demonstrieren, wie man die Datenbank abfragen kann, um Tabellen und Schemas aufzulisten.
converter42
244
In Python:
con = sqlite3.connect('database.db')
cursor = con.cursor()
cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")print(cursor.fetchall())
Achten Sie auf meine andere Antwort . Es gibt einen viel schnelleren Weg mit Pandas.
# Convert file existing_db.db to SQL dump file dump.sqlimport sqlite3, os
con = sqlite3.connect('existing_db.db')with open('dump.sql','w')as f:for line in con.iterdump():
f.write('%s\n'% line)
Ich habe viele Fehler in dem von Ihnen geschriebenen Snippet erhalten und sehe weder "db_alias" in den referenzierten Dokumenten noch in anderen Beispielen. Im Zusammenhang mit den anderen Beispielen denke ich, dass Sie diese Zeile wollen, zum Beispiel die JobTabelle: meta = cursor.execute("PRAGMA table_info('Job')") Und Ihre erste Zeile scheint nichts mit dem Rest zu tun zu haben.
Nealmcb
4
Wenn jemand dasselbe mit Pandas machen will
import pandas as pd
import sqlite3
conn = sqlite3.connect("db.sqlite3")
table = pd.read_sql_query("SELECT name FROM sqlite_master WHERE type='table'", conn)print(table)
Mit diesem Definitionsparser können Sie die Definitionen wie im folgenden Code analysieren:
$parser =newSqliteTableDefinitionParser;
$parser->parseColumnDefinitions('x INTEGER PRIMARY KEY, y DOUBLE, z DATETIME default \'2011-11-10\', name VARCHAR(100)');
Antworten:
Sie können die Liste der Tabellen und Schemata abrufen, indem Sie die Tabelle SQLITE_MASTER abfragen:
quelle
sqlite> .schema job
ungültige Syntax in Python ... was fehlt mir?sqlite>
ist die SQLite-Befehlszeilen-Client-Eingabeaufforderung. Der Zweck des Beispiels war es zu demonstrieren, wie man die Datenbank abfragen kann, um Tabellen und Schemas aufzulisten.In Python:
Achten Sie auf meine andere Antwort . Es gibt einen viel schnelleren Weg mit Pandas.
quelle
cursor.close()
db.close()
Der SCHNELLSTE Weg, dies in Python zu tun, ist die Verwendung von Pandas (Version 0.16 und höher).
Werfen Sie einen Tisch weg:
Alle Tabellen löschen:
quelle
cursor.close()
unddb.close()
.with sqlite3.connect('database.db') as db:
Ich bin nicht mit der Python-API vertraut, aber Sie können sie immer verwenden
quelle
Hier ist ein kurzes und einfaches Python-Programm zum Ausdrucken der Tabellennamen und Spaltennamen für diese Tabellen (Python 2. Python 3 folgt).
(BEARBEITEN: Ich habe regelmäßig Abstimmungen dazu erhalten, daher hier die Python3-Version für Leute, die diese Antwort finden.)
quelle
Anscheinend hat die in Python 2.6 enthaltene Version von sqlite3 diese Fähigkeit: http://docs.python.org/dev/library/sqlite3.html
quelle
Nach langem Hin und Her fand ich bei sqlite docs eine bessere Antwort, um die Metadaten für die Tabelle aufzulisten, sogar angehängte Datenbanken.
Die Schlüsselinformationen sind das Präfix table_info und nicht my_table mit dem Namen des Anhangshandles.
quelle
Job
Tabelle:meta = cursor.execute("PRAGMA table_info('Job')")
Und Ihre erste Zeile scheint nichts mit dem Rest zu tun zu haben.Wenn jemand dasselbe mit Pandas machen will
quelle
Überprüfen Sie hier für Dump. Es scheint, dass es in der Bibliothek sqlite3 eine Dump-Funktion gibt.
quelle
quelle
Ich habe einen SQLite-Tabellenschema-Parser in PHP implementiert. Sie können dies hier überprüfen: https://github.com/c9s/LazyRecord/blob/master/src/LazyRecord/TableParser/SqliteTableDefinitionParser.php
Mit diesem Definitionsparser können Sie die Definitionen wie im folgenden Code analysieren:
quelle