Proponuję zmienić nazwę pytania na coś, co nie jest specyficzne dla Pythona, ponieważ odpowiedź jest w rzeczywistości uniwersalna dla interfejsów używających SQL.
unode
2
To prawda, chociaż pytałem o interfejs API języka Python. Spróbuję znaleźć właściwą nazwę.
noamtm
3
Jeśli chcesz wyświetlić tabele z wiersza polecenia sqlite3, przejdź do stackoverflow.com/questions/82875/… . Jeśli używasz pakietu Python sqlite3, zobacz odpowiedź Davouda Taghawi-Nejada tutaj. Sugeruję OP dodać Pythona z powrotem do tytułu pytania i wybrać odpowiedź Davouda. Znalazłem tę stronę, wpisując w Google „pokaż tabele Python sqlite3”, ponieważ Google zna stary tytuł pytania. Wyszukiwania w SO nie trafiłyby tutaj. Bez punktu Pythona, połączone pytanie o zduplikowane pytanie 82875 zyskało znacznie więcej mądrości tłumu.
Bennett Brown
Odpowiedzi:
106
Możesz pobrać listę tabel i schematów, wysyłając zapytanie do tabeli SQLITE_MASTER:
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>to znak zachęty klienta wiersza poleceń sqlite. Celem przykładu było zademonstrowanie, w jaki sposób można wysłać zapytanie do bazy danych w celu wyświetlenia tabel i schematów.
konwerter42
245
W Pythonie:
con = sqlite3.connect('database.db')
cursor = con.cursor()
cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")print(cursor.fetchall())
Uważaj na moją drugą odpowiedź . Istnieje znacznie szybszy sposób korzystania z pand.
# 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)
Mam wiele błędów we fragmencie, który napisałeś, i nie widzę np. „Db_alias” ani w dokumentach, do których istnieją odwołania, ani w innych przykładach. W kontekście innych przykładów myślę, że potrzebujesz tej linii, np. JobTabeli: meta = cursor.execute("PRAGMA table_info('Job')") A twoja pierwsza linia wydaje się niezwiązana z resztą.
nealmcb
4
Jeśli ktoś chce zrobić to samo z Pandami
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)
Możesz użyć tego parsera definicji, aby przeanalizować definicje, takie jak poniższy kod:
$parser =newSqliteTableDefinitionParser;
$parser->parseColumnDefinitions('x INTEGER PRIMARY KEY, y DOUBLE, z DATETIME default \'2011-11-10\', name VARCHAR(100)');
Odpowiedzi:
Możesz pobrać listę tabel i schematów, wysyłając zapytanie do tabeli SQLITE_MASTER:
źródło
sqlite> .schema job
nieprawidłowa składnia w Pythonie ... czego mi brakuje?sqlite>
to znak zachęty klienta wiersza poleceń sqlite. Celem przykładu było zademonstrowanie, w jaki sposób można wysłać zapytanie do bazy danych w celu wyświetlenia tabel i schematów.W Pythonie:
Uważaj na moją drugą odpowiedź . Istnieje znacznie szybszy sposób korzystania z pand.
źródło
cursor.close()
idb.close()
NAJSZYBSZY sposób na zrobienie tego w Pythonie to użycie Pand (wersja 0.16 i nowsze).
Zrzuć jedną tabelę:
Zrzuć wszystkie tabele:
źródło
cursor.close()
idb.close()
.with sqlite3.connect('database.db') as db:
Nie znam interfejsu API Pythona, ale zawsze możesz go użyć
źródło
Oto krótki i prosty program w Pythonie do drukowania nazw tabel i nazw kolumn dla tych tabel (python 2. python 3 poniżej).
(EDYCJA: otrzymuję okresowe głosowania na ten temat, więc oto wersja python3 dla osób, które znajdują tę odpowiedź)
źródło
Najwyraźniej wersja sqlite3 zawarta w Pythonie 2.6 ma taką możliwość: http://docs.python.org/dev/library/sqlite3.html
źródło
Po wielu zabawach znalazłem lepszą odpowiedź w sqlite docs, aby wyświetlić metadane tabeli, nawet dołączone bazy danych.
Kluczową informacją jest dodanie przedrostka table_info, a nie my_table nazwą uchwytu załącznika.
źródło
Job
Tabeli:meta = cursor.execute("PRAGMA table_info('Job')")
A twoja pierwsza linia wydaje się niezwiązana z resztą.Jeśli ktoś chce zrobić to samo z Pandami
źródło
Sprawdź tutaj, aby uzyskać zrzut. Wygląda na to, że w bibliotece sqlite3 znajduje się funkcja zrzutu.
źródło
źródło
Zaimplementowałem parser schematu tabeli sqlite w PHP, możesz sprawdzić tutaj: https://github.com/c9s/LazyRecord/blob/master/src/LazyRecord/TableParser/SqliteTableDefinitionParser.php
Możesz użyć tego parsera definicji, aby przeanalizować definicje, takie jak poniższy kod:
źródło