Bagaimana daftar tabel dalam file database SQLite yang dibuka dengan ATTACH?
1197
Apa SQL dapat digunakan untuk daftar tabel, dan baris dalam tabel-tabel dalam file database SQLite - setelah saya melampirkannya dengan ATTACHperintah pada alat baris perintah SQLite 3 ?
Berikut ini adalah GUI yang berguna untuk sqlite jika Anda tertarik: sqlitestudio.pl Memberi Anda akses untuk melihat rincian basis data, tabel, dengan sangat cepat dan memiliki editor kueri yang bagus juga ...
James Oravec
17
.tablesuntuk tabel dan .schema ?TABLE?untuk skema tabel tertentu.
H6.
.table 'bank_%'atau .table '%_empl'sintaks yang valid untuk quering prefixes / suffixes!
gavenkoa
Jawaban:
576
Fungsi .tables, dan .schema"pembantu" tidak melihat ke dalam database ATTACHed: mereka hanya query SQLITE_MASTERtabel untuk database "utama". Alhasil, jika digunakan
ATTACH some_file.db AS my_db;
maka yang perlu Anda lakukan
SELECT name FROM my_db.sqlite_master WHERE type='table';
Perhatikan bahwa tabel sementara tidak muncul dengan .tablesbaik: Anda harus daftar sqlite_temp_masteruntuk itu:
SELECT name FROM sqlite_temp_master WHERE type='table';
Hanya "SELECT name FROM sqlite_master WHERE type='table'"bekerja untuk saya
vladkras
3
SELECT name FROM my_db.sqlite_master WHERE type = 'table'; ini tidak bekerja untuk saya (untuk DB terlampir) dan melempar kesalahan karena: tidak ada tabel seperti itu "my_db.sqlite_master"
kanika
apa yang Anda maksud dengan tabel sementara? Apakah ada ketika saya baru saja membuka file db SQLite?
Ewoks
Tabel sementara adalah tabel yang dibuat dengan CREATE TEMPORARY TABLEperintah SQL. Kontennya dibuang ketika koneksi database saat ini ditutup, dan mereka tidak pernah disimpan ke file database.
Anthony Williams
1
Di bawah mode perintah sqlite3 dan jalankan ATTACH "some_file.db" AS my_db; Ini berhasil!
John_J
1272
Ada beberapa langkah untuk melihat tabel dalam database SQLite:
Daftar tabel di database Anda:
.tables
Sebutkan tabelnya:
.schema tablename
Cetak seluruh tabel:
SELECT*FROM tablename;
Daftar semua perintah prompt SQLite yang tersedia:
.tabledan .tableskeduanya diizinkan. Dalam hal ini, .taakan berfungsi juga, karena sqlite3 akan menerima perintah apa pun yang tidak ambigu. Nama perintah sesuai dengan bantuan memang ".tabel" (jika ada yang masih memperhatikan).
dbn
29
(Ini harus menjadi jawaban yang diterima, itu adalah cara paling sqlite-y untuk melakukan sesuatu).
dbn
6
.tablestidak akan menampilkan tabel jika seseorang membuka database ATTACH '<path>' AS <name>;tetapi jawaban lasse akan berhasil. karena OP menyebutkan ATTACHing saya percaya dia benar dalam tidak menerima jawaban ini. sunting: hanya memperhatikan bahwa anthony dan yang lainnya di bawah ini juga menunjukkan hal ini.
antiplex
2
@dbw: Tidak perlu. Pertimbangkan Anda sedang melakukan pembungkus DB yang dapat menggunakan SQLite atau MySql (kasus saya). Menggunakan lebih banyak perintah SQL-conform akan membuatnya lebih mudah untuk port yang dibungkus dalam bahasa lain maka jika Anda akan menggunakan perintah khusus DB-vendor.
Valentin Heinitz
"... sqlite3 akan menerima perintah apa pun yang tidak ambigu ..." Sayangnya kadang-kadang juga menerima perintah ambigu. Sebagai contoh, ".s" diartikan sebagai ".show", meskipun ".schema", '.separator ", atau" .stats "akan menjadi kemungkinan juga. Dan ketika tidak menerima perintah yang ambigu, itu tidak mencantumkan kemungkinan
442
Tampaknya Anda harus melalui tabel sqlite_master , seperti ini:
SELECT*FROM dbname.sqlite_master WHERE type='table';
Dan kemudian secara manual melalui setiap tabel dengan SELECTatau mirip untuk melihat baris.
The .DUMPdan .SCHEMAperintah tidak muncul untuk melihat database sama sekali.
Bukan sesuatu yang mudah dibaca atau diingat untuk digunakan di masa depan; .tablesperintah builtin lebih intuitif
24
@Gryllida: meskipun ini dapat digunakan dari SQL-API karena ini adalah SQL valide. Perintah bawaan mungkin tidak didukung di mana pun.
Valentin Heinitz
2
@DoktorJ Telah .tablesdimodifikasi untuk menampilkan tabel dari database terlampir?
Lasse V. Karlsen
4
Dalam database itu , ya, tapi pertanyaan ini adalah tentang menampilkan tabel dalam database yang Anda lampirkan. Apakah .tablesperintah telah dimodifikasi untuk menunjukkannya juga?
Lasse V. Karlsen
4
Doh! Pemahaman bacaan gagal ... Saya entah bagaimana berhasil tidak menangkap referensi ATTACH ... dua kali> _ <
Doktor J
162
Untuk menampilkan semua tabel, gunakan
SELECT name FROM sqlite_master WHERE type ="table"
Untuk menunjukkan semua baris, saya kira Anda dapat mengulangi semua tabel dan hanya melakukan SELECT * pada masing-masing. Tapi mungkin DUMP yang Anda cari?
Aneh, itu pasti benar, tetapi tidak berfungsi ketika saya menggunakannya
Jürgen K.
42
Ada perintah yang tersedia untuk ini di baris perintah SQLite:
.tables ?PATTERN? List names of tables matching a LIKE pattern
Yang mengonversi ke SQL berikut:
SELECT name FROM sqlite_master
WHERE type IN('table','view')AND name NOTLIKE'sqlite_%'UNIONALLSELECT name FROM sqlite_temp_master
WHERE type IN('table','view')ORDERBY1
Jadi ... cur.execute(""" SELECT name FROM sqlite_master WHERE type='table';""")atau tidak? Itu tidak berfungsi untuk saya, tetapi saya tidak yakin di mana kode ini seharusnya dijalankan.
Menurut dokumentasi , padanan dari MySQL SHOW TABLES;adalah:
Perintah ".tables" mirip dengan pengaturan mode daftar kemudian menjalankan kueri berikut:
SELECT name FROM sqlite_master
WHERE type IN('table','view')AND name NOTLIKE'sqlite_%'UNIONALLSELECT name FROM sqlite_temp_master
WHERE type IN('table','view')ORDERBY1;
Namun, jika Anda memeriksa apakah ada satu tabel (atau untuk mendapatkan detailnya), lihat jawaban @LuizGeron .
SQLite versi 3.7.13 2012-07-17 17:46:21 Masukkan ".help" untuk instruksi Masukkan pernyataan SQL yang diakhiri dengan ";" sqlite> .fullschema Error: perintah tidak dikenal atau argumen tidak valid: "fullschema". Masukkan ".help" untuk bantuan
Mona Jalal
2
Anda menggunakan versi dari 2012
lada
12
Cara termudah untuk melakukan ini adalah membuka database secara langsung dan menggunakan .dumpperintah, daripada melampirkannya setelah menjalankan alat shell SQLite 3.
Jadi ... (anggap prompt perintah OS Anda adalah $) alih-alih $sqlite3:
sqlite3> ATTACH database.sqlite as"attached"
Dari baris perintah OS Anda, buka database secara langsung:
Anda dapat memanipulasi basis data Anda menggunakan perintah yang dijelaskan dalam tautan ini. Selain itu, jika Anda menggunakan OS Windows dan tidak tahu di mana shell perintah, itu ada di situs SQLite:
Setelah mengunduhnya, klik file sqlite3.exe untuk menginisialisasi shell perintah SQLite . Ketika diinisialisasi, secara default sesi SQLite ini menggunakan database dalam memori, bukan file pada disk, dan semua perubahan akan hilang saat sesi keluar. Untuk menggunakan file disk persisten sebagai basis data, masukkan perintah ".open ex1.db" segera setelah jendela terminal dimulai.
Contoh di atas menyebabkan file database bernama "ex1.db" dibuka dan digunakan, dan dibuat jika sebelumnya tidak ada. Anda mungkin ingin menggunakan pathname lengkap untuk memastikan bahwa file ada di direktori yang Anda pikir itu masuk. Gunakan garis miring ke depan sebagai karakter pemisah direktori. Dengan kata lain gunakan "c: /work/ex1.db", bukan "c: \ work \ ex1.db".
Untuk melihat semua tabel dalam database yang telah Anda pilih sebelumnya, ketikkan perintah .tabel seperti yang dikatakan dalam tautan di atas.
Jika Anda bekerja di Windows, saya pikir mungkin berguna untuk memindahkan file sqlite.exe ini ke folder yang sama dengan file Python lainnya. Dengan cara ini, file Python menulis dan shell SQLite membaca dari file .db berada di jalur yang sama.
Komando ".schema" akan mencantumkan tabel dan baris yang tersedia, dengan menunjukkan kepada Anda pernyataan yang digunakan untuk membuat tabel tersebut:
sqlite> create table_a (id int, a int, b int);
sqlite> .schema table_a
CREATE TABLE table_a (id int, a int, b int);
.tables
untuk tabel dan.schema ?TABLE?
untuk skema tabel tertentu..table 'bank_%'
atau.table '%_empl'
sintaks yang valid untuk quering prefixes / suffixes!Jawaban:
Fungsi
.tables
, dan.schema
"pembantu" tidak melihat ke dalam database ATTACHed: mereka hanya querySQLITE_MASTER
tabel untuk database "utama". Alhasil, jika digunakanmaka yang perlu Anda lakukan
Perhatikan bahwa tabel sementara tidak muncul dengan
.tables
baik: Anda harus daftarsqlite_temp_master
untuk itu:sumber
"SELECT name FROM sqlite_master WHERE type='table'"
bekerja untuk sayaCREATE TEMPORARY TABLE
perintah SQL. Kontennya dibuang ketika koneksi database saat ini ditutup, dan mereka tidak pernah disimpan ke file database.ATTACH "some_file.db" AS my_db;
Ini berhasil!Ada beberapa langkah untuk melihat tabel dalam database SQLite:
Daftar tabel di database Anda:
Sebutkan tabelnya:
Cetak seluruh tabel:
Daftar semua perintah prompt SQLite yang tersedia:
sumber
.table
dan.tables
keduanya diizinkan. Dalam hal ini,.ta
akan berfungsi juga, karena sqlite3 akan menerima perintah apa pun yang tidak ambigu. Nama perintah sesuai dengan bantuan memang ".tabel" (jika ada yang masih memperhatikan)..tables
tidak akan menampilkan tabel jika seseorang membuka databaseATTACH '<path>' AS <name>;
tetapi jawaban lasse akan berhasil. karena OP menyebutkan ATTACHing saya percaya dia benar dalam tidak menerima jawaban ini. sunting: hanya memperhatikan bahwa anthony dan yang lainnya di bawah ini juga menunjukkan hal ini.Tampaknya Anda harus melalui tabel sqlite_master , seperti ini:
Dan kemudian secara manual melalui setiap tabel dengan
SELECT
atau mirip untuk melihat baris.The
.DUMP
dan.SCHEMA
perintah tidak muncul untuk melihat database sama sekali.sumber
.tables
perintah builtin lebih intuitif.tables
dimodifikasi untuk menampilkan tabel dari database terlampir?.tables
perintah telah dimodifikasi untuk menunjukkannya juga?Untuk menampilkan semua tabel, gunakan
Untuk menunjukkan semua baris, saya kira Anda dapat mengulangi semua tabel dan hanya melakukan SELECT * pada masing-masing. Tapi mungkin DUMP yang Anda cari?
sumber
Gunakan
.help
untuk memeriksa perintah yang tersedia.Perintah ini akan menampilkan semua tabel di bawah basis data Anda saat ini.
sumber
Ada perintah yang tersedia untuk ini di baris perintah SQLite:
Yang mengonversi ke SQL berikut:
sumber
Untuk membuat daftar tabel, Anda juga dapat melakukan:
sumber
cur.execute(""" SELECT name FROM sqlite_master WHERE type='table';""")
atau tidak? Itu tidak berfungsi untuk saya, tetapi saya tidak yakin di mana kode ini seharusnya dijalankan.Coba
PRAGMA table_info(table-name);
http://www.sqlite.org/pragma.html#schema
sumber
Saya menggunakan kueri ini untuk mendapatkannya:
Dan untuk digunakan di iOS:
sumber
Menurut dokumentasi , padanan dari MySQL
SHOW TABLES;
adalah:Namun, jika Anda memeriksa apakah ada satu tabel (atau untuk mendapatkan detailnya), lihat jawaban @LuizGeron .
sumber
Pada versi terbaru dari SQLite 3 Anda dapat mengeluarkan:
untuk melihat semua pernyataan buat Anda.
sumber
Cara termudah untuk melakukan ini adalah membuka database secara langsung dan menggunakan
.dump
perintah, daripada melampirkannya setelah menjalankan alat shell SQLite 3.Jadi ... (anggap prompt perintah OS Anda adalah $) alih-alih
$sqlite3
:Dari baris perintah OS Anda, buka database secara langsung:
sumber
Melalui a
union all
, gabungkan semua tabel menjadi satu daftar.sumber
Menggunakan:
sumber
Karena tidak ada yang menyebutkan tentang referensi resmi SQLite, saya pikir mungkin berguna untuk merujuknya di bawah judul ini:
https://www.sqlite.org/cli.html
Anda dapat memanipulasi basis data Anda menggunakan perintah yang dijelaskan dalam tautan ini. Selain itu, jika Anda menggunakan OS Windows dan tidak tahu di mana shell perintah, itu ada di situs SQLite:
https://www.sqlite.org/download.html
Setelah mengunduhnya, klik file sqlite3.exe untuk menginisialisasi shell perintah SQLite . Ketika diinisialisasi, secara default sesi SQLite ini menggunakan database dalam memori, bukan file pada disk, dan semua perubahan akan hilang saat sesi keluar. Untuk menggunakan file disk persisten sebagai basis data, masukkan perintah ".open ex1.db" segera setelah jendela terminal dimulai.
Contoh di atas menyebabkan file database bernama "ex1.db" dibuka dan digunakan, dan dibuat jika sebelumnya tidak ada. Anda mungkin ingin menggunakan pathname lengkap untuk memastikan bahwa file ada di direktori yang Anda pikir itu masuk. Gunakan garis miring ke depan sebagai karakter pemisah direktori. Dengan kata lain gunakan "c: /work/ex1.db", bukan "c: \ work \ ex1.db".
Untuk melihat semua tabel dalam database yang telah Anda pilih sebelumnya, ketikkan perintah .tabel seperti yang dikatakan dalam tautan di atas.
Jika Anda bekerja di Windows, saya pikir mungkin berguna untuk memindahkan file sqlite.exe ini ke folder yang sama dengan file Python lainnya. Dengan cara ini, file Python menulis dan shell SQLite membaca dari file .db berada di jalur yang sama.
sumber
Komando ".schema" akan mencantumkan tabel dan baris yang tersedia, dengan menunjukkan kepada Anda pernyataan yang digunakan untuk membuat tabel tersebut:
sumber
.da untuk melihat semua basis data - yang disebut ' utama '
tabel dari basis data ini dapat dilihat oleh
PILIH tbl_name berbeda dari urutan sqlite_master sebanyak 1;
Basis data terlampir membutuhkan awalan yang Anda pilih dengan AS dalam pernyataan ATTACH misalnya aa (, bb, cc ...) jadi:
PILIH tbl_name berbeda dari pesanan aa.sqlite_master sebanyak 1;
Perhatikan bahwa di sini Anda mendapatkan pandangan juga. Untuk mengecualikan ini tambahkan di mana ketik = 'table' sebelum 'order'
sumber