Saya sarankan mengubah nama pertanyaan menjadi sesuatu yang bukan python spesifik karena jawabannya sebenarnya universal untuk antarmuka yang menggunakan SQL.
unode
2
Benar, meskipun saya mengharapkan API python ketika menanyakannya. Saya akan mencoba mencari nama yang tepat.
noamtm
3
Jika ingin menampilkan tabel dari command prompt sqlite3, lihat stackoverflow.com/questions/82875/… . Jika menggunakan paket Python sqlite3, lihat jawaban Davoud Taghawi-Nejad di sini. Saya sarankan OP tambahkan Python kembali ke judul pertanyaan dan pilih jawaban Davoud. Saya menemukan halaman ini dengan googling "tampilkan tabel Python sqlite3" karena Google tahu judul pertanyaan lama. Pencarian dalam SO akan gagal mendarat di sini. Tanpa sudut Python, pertanyaan duplikat 82875 yang ditautkan telah menerima jauh lebih banyak kebijaksanaan orang banyak.
Bennett Brown
Jawaban:
106
Anda bisa mengambil daftar tabel dan skema dengan menanyakan tabel 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>adalah prompt klien baris perintah sqlite. Tujuan dari contoh ini adalah untuk menunjukkan bagaimana seseorang dapat meminta database untuk mendaftar tabel dan skema.
converter42
245
Dengan Python:
con = sqlite3.connect('database.db')
cursor = con.cursor()
cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")print(cursor.fetchall())
Perhatikan jawaban saya yang lain . Ada cara yang jauh lebih cepat menggunakan panda.
# 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)
Saya mendapat banyak kesalahan dalam cuplikan yang Anda tulis, dan tidak melihat misalnya "db_alias" baik dalam dokumen yang direferensikan atau dalam contoh lain. Dalam konteks contoh lain, saya pikir Anda ingin baris ini, misalnya Jobtabel: meta = cursor.execute("PRAGMA table_info('Job')") Dan baris pertama Anda tampaknya tidak terkait dengan yang lain.
nealmcb
4
Jika seseorang ingin melakukan hal yang sama dengan Panda
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)
Anda dapat menggunakan pengurai definisi ini untuk menguraikan definisi seperti kode di bawah ini:
$parser =newSqliteTableDefinitionParser;
$parser->parseColumnDefinitions('x INTEGER PRIMARY KEY, y DOUBLE, z DATETIME default \'2011-11-10\', name VARCHAR(100)');
Jawaban:
Anda bisa mengambil daftar tabel dan skema dengan menanyakan tabel SQLITE_MASTER:
sumber
sqlite> .schema job
sintaks tidak valid dalam python ... apa yang saya lewatkan?sqlite>
adalah prompt klien baris perintah sqlite. Tujuan dari contoh ini adalah untuk menunjukkan bagaimana seseorang dapat meminta database untuk mendaftar tabel dan skema.Dengan Python:
Perhatikan jawaban saya yang lain . Ada cara yang jauh lebih cepat menggunakan panda.
sumber
cursor.close()
dandb.close()
Cara TERCEPAT untuk melakukan ini dalam python adalah menggunakan Pandas (versi 0.16 dan lebih tinggi).
Buang satu meja:
Buang semua tabel:
sumber
cursor.close()
dandb.close()
.with sqlite3.connect('database.db') as db:
Saya tidak terbiasa dengan API Python tetapi Anda selalu dapat menggunakan
sumber
Berikut adalah program python pendek dan sederhana untuk mencetak nama tabel dan nama kolom untuk tabel tersebut (python 2. python 3 mengikuti).
(EDIT: Saya mendapatkan voting secara berkala, jadi ini adalah versi python3 untuk orang-orang yang menemukan jawaban ini)
sumber
Rupanya versi sqlite3 yang termasuk dalam Python 2.6 memiliki kemampuan ini: http://docs.python.org/dev/library/sqlite3.html
sumber
Setelah banyak mengutak-atik saya menemukan jawaban yang lebih baik di sqlite docs untuk daftar metadata untuk tabel, bahkan database terlampir.
Informasi kuncinya adalah awalan table_info, bukan my_table dengan nama pegangan lampiran.
sumber
Job
tabel:meta = cursor.execute("PRAGMA table_info('Job')")
Dan baris pertama Anda tampaknya tidak terkait dengan yang lain.Jika seseorang ingin melakukan hal yang sama dengan Panda
sumber
Lihat di sini untuk dump. Tampaknya ada fungsi dump di library sqlite3.
sumber
sumber
Saya telah menerapkan parser skema tabel sqlite di PHP, Anda dapat memeriksa di sini: https://github.com/c9s/LazyRecord/blob/master/src/LazyRecord/TableParser/SqliteTableDefinitionParser.php
Anda dapat menggunakan pengurai definisi ini untuk menguraikan definisi seperti kode di bawah ini:
sumber