ATTACH ile açılan bir SQLite veritabanı dosyasındaki tablolar nasıl listelenir?


1197

Ne SQL bir in bu tablolarda içinde tablolar ve satırları listelemek için kullanılabilir SQLite veritabanı dosyasında - Ben bunu ekledikten sonra ATTACHüzerine komuta SQLite 3 komut satırı aracı?


1
bunu deneyin tabloların tam bilgi var http://www.sqlite.org/pragma.html#schema
Piyush

2
Aşağıdaki ilgileniyorsanız sqlite için yararlı bir GUI: sqlitestudio.pl veritabanlarının, tabloların ayrıntılarını çok hızlı bir şekilde görüntülemek için erişim sağlar ve çok güzel bir sorgu editörü var ...
James Oravec

17
.tablestablolar ve .schema ?TABLE?belirli tablonun şeması için.
H6.

.table 'bank_%'veya .table '%_empl'sorgulama önekleri / sonekleri için geçerli bir sözdizimi!
gavenkoa

Yanıtlar:


576

.tablesVe .schema"yardımcı" fonksiyonları ekli veritabanlarına bakma: onlar sadece sorgu SQLITE_MASTER"ana" veritabanı için tablo. Sonuç olarak,

ATTACH some_file.db AS my_db;

o zaman yapmalısın

SELECT name FROM my_db.sqlite_master WHERE type='table';

Geçici tabloların şunlardan .tablesbiriyle görünmediğini unutmayın: sqlite_temp_masterbunun için listelemeniz gerekir :

SELECT name FROM sqlite_temp_master WHERE type='table';

121
Sadece "SELECT name FROM sqlite_master WHERE type='table'"benim için çalışıyor
vladkras

3
SELECT adı FROM my_db.sqlite_master WHERE type = 'table'; Bu benim için çalışmıyor (ekli DB için) ve hata atar: böyle bir tablo yok "my_db.sqlite_master"
kanika

geçici tablolarla ne demek istiyorsun? SQLite db dosyasını açtığımda herhangi bir var mı?
Ewoks

Geçici tablolar, CREATE TEMPORARY TABLESQL komutlarıyla oluşturulan tablolardır . Geçerli veritabanı bağlantısı kapatıldığında içerikleri bırakılır ve hiçbir zaman bir veritabanı dosyasına kaydedilmez.
Anthony Williams

1
Sqlite3 komut modunda ve çalıştırın ATTACH "some_file.db" AS my_db; Çalıştı!
John_J

1272

SQLite veritabanındaki tabloları görmek için birkaç adım vardır:

  1. Veritabanınızdaki tabloları listeleyin:

    .tables
  2. Tablonun nasıl göründüğünü listeleyin:

    .schema tablename
  3. Tüm tabloyu yazdırın:

    SELECT * FROM tablename;
  4. Mevcut tüm SQLite komut istemlerini listeleyin:

    .help

45
.tableve .tablesher ikisine de izin verilir. Bu nedenle, .tasqlite3 açık olan herhangi bir komutu kabul edeceği için de işe yarayacaktır. Yardıma göre komutun adı gerçekten de ".tables" dır (eğer hala ilgileniyorsa).
dbn

29
(Bu kabul edilen cevap olmalı, bir şeyler yapmanın en sqlite-y yoludur).
dbn

6
.tablesüzerinden bir veritabanı açıldığında tablolar görüntülenmez ATTACH '<path>' AS <name>;ancak lasse'nin cevabı yapılır. OP ATTACHing'den bahsettiğinden beri bu cevabı kabul etmede haklı olduğuna inanıyorum. edit: sadece anthony ve aşağıdaki diğerleri de dikkat çekti.
antiplex

2
@dbw: Zorunlu değil. SQLite veya MySql (benim durumum) kullanabilen bir DB sarmalayıcısı yaptığınızı düşünün. Daha fazla SQL uyumlu komutlar kullanmak, sarılmış diğer dillerde bağlantı yapılmasını kolaylaştıracaktır, o zaman DB satıcısına özgü komutları kullanırsanız.
Valentin Heinitz

"... sqlite3 açık olan herhangi bir komutu kabul eder ..." Ne yazık ki bazen belirsiz komutları da kabul eder. Örneğin, ".s", ".schema", ".separator" veya ".stats" da olasılıklar olsa da ".show" olarak yorumlanır ve belirsiz bir komutu kabul etmediğinde, olasılıkları listelemez.

442

Görünüşe göre sqlite_master tablosundan geçmeniz gerekiyor, şöyle :

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

Ve sonra SELECTsatırlara bakmak için her tabloyu bir veya benzeri ile manuel olarak geçirin.

.DUMPVe .SCHEMAkomutlar hiç veritabanını görmek görünmüyor.


120
Gelecekte kullanımı kolay veya hatırlanması kolay bir şey değil; yerleşik .tableskomut daha sezgisel

24
@Gryllida: Buna rağmen valide SQL olduğu için herhangi bir SQL-API'den kullanılabilir. Yerleşik komutlar her yerde desteklenmeyebilir.
Valentin Heinitz

2
@DoktorJ .tablesEkli bir veritabanındaki tabloları görüntülemek için değiştirildi mi?
Lasse V. Karlsen

4
Bu veritabanında , evet, ancak bu soru, eklediğiniz bir veritabanındaki tabloları göstermekle ilgiliydi. Mü .tableskomut kuyunun sıra bu gösterecek şekilde değiştirildi?
Lasse V. Karlsen

4
Doh! Okuduğunu anlama başarısız ... Bir şekilde ATTACH referansını yakalamayı başaramadım ... iki kez> _ <
Doktor J

162

Tüm tabloları göstermek için

SELECT name FROM sqlite_master WHERE type = "table"

Tüm satırları göstermek için, sanırım tüm tabloları yineleyebilir ve her birinde bir SELECT * yapabilirsiniz. Ama belki peşinde bir DUMP var mı?


16
Soruyu gerçekten ele alan tek cevap için teşekkürler ... "Ne SQL", hangi komut kullanılamaz ... teşekkürler!
Brad Parks

Ayrıca, bu satır başına bir tablo adı yazdırırken, .tables tablo adlarının birden çok sütununu yazdırır (sinir bozucu / yararlı değil).
Shane

68

Kullanılabilir .helpkomutları kontrol etmek için kullanın.

.table

Bu komut, geçerli veritabanınız altındaki tüm tabloları gösterir.


Garip, doğru olmalı, ama kullandığımda çalışmıyor
Jürgen K.

42

SQLite komut satırında bunun için kullanılabilir bir komut vardır:

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

Hangi aşağıdaki SQL dönüştürür:

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

36

Tabloları listelemek için şunları da yapabilirsiniz:

SELECT name FROM sqlite_master
WHERE type='table';

Yani ... cur.execute(""" SELECT name FROM sqlite_master WHERE type='table';""")ya da hayır? Bu benim için çalışmıyor, ama bu kodun nerede çalıştırılacağından emin değilim.
jbuddy_13


24

Bunu almak için bu sorguyu kullanın:

SELECT name FROM sqlite_master WHERE type='table'

İOS'ta kullanmak için:

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

16

Belgelere göre , MySQL'lerin eşdeğeri SHOW TABLES;:

".Tables" komutu, liste modunun ayarlanmasına ve ardından aşağıdaki sorgunun yürütülmesine benzer:

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;

Ancak, tek bir tablonun var olup olmadığını (veya ayrıntılarını almak için) kontrol ediyorsanız, @LuizGeron cevabına bakınız .


15

SQLite 3'ün en son sürümlerinden itibaren aşağıdakileri yapabilirsiniz:

.fullschema

tüm oluştur ifadelerinizi görmek için.


SQLite sürüm 3.7.13 2012-07-17 17:46:21 Talimatlar için ".help" girin ";" ile biten SQL ifadelerini girin sqlite> .fullschema Hata: bilinmeyen komut veya geçersiz argümanlar: "fullschema". Yardım için ".help" girin
Mona Jalal

2
2012'den bir sürüm kullanıyorsunuz
biber

12

Bunu yapmanın en kolay yolu, veritabanını .dumpSQLite 3 kabuk aracını çağırdıktan sonra eklemek yerine doğrudan açmak ve komutu kullanmaktır .

Yani ... (OS komut satırı isteminizin $ olduğunu varsayalım) $sqlite3:

sqlite3> ATTACH database.sqlite as "attached"

İşletim sistemi komut satırınızdan veritabanını doğrudan açın:

$sqlite3 database.sqlite
sqlite3> .dump

10

A ile union alltüm tabloları tek bir listede birleştirin.

select name
from sqlite_master 
where type='table'

union all 

select name 
from sqlite_temp_master 
where type='table'

9

kullanın:

import sqlite3

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

7

Kimse SQLite'nin resmi referansından bahsetmediğinden, bu başlık altında başvurmanın yararlı olabileceğini düşünüyorum:

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

Bu bağlantıda açıklanan komutları kullanarak veritabanınızı değiştirebilirsiniz. Ayrıca, Windows işletim sistemi kullanıyorsanız ve komut kabuğunun nerede olduğunu bilmiyorsanız, SQLite'ın sitesinde:

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

İndirmeden sonra SQLite komut kabuğu başlatmak için sqlite3.exe dosyayı tıklayın . Başlatıldığında, bu SQLite oturumu varsayılan olarak diskteki bir dosyayı değil, bellek içi bir veritabanı kullanır ve bu nedenle oturumdan çıkıldığında tüm değişiklikler kaybolur. Kalıcı bir disk dosyasını veritabanı olarak kullanmak için, terminal penceresi başladıktan hemen sonra ".open ex1.db" komutunu girin.

Yukarıdaki örnek, "ex1.db" adlı veritabanı dosyasının açılmasına ve kullanılmasına ve daha önce yoksa oluşturulmasına neden olur. Dosyanın içinde olduğunu düşündüğünüz dizinde olduğundan emin olmak için tam bir yol adı kullanmak isteyebilirsiniz. Dizin ayırıcı karakter olarak eğik çizgi kullanın. Başka bir deyişle, "c: \ work \ ex1.db" değil, "c: /work/ex1.db" kullanın.

Daha önce seçtiğiniz veritabanındaki tüm tabloları görmek için , yukarıdaki bağlantıda belirtildiği gibi .tables komutunu yazın .

Windows'ta çalışıyorsanız, bu sqlite.exe dosyasını diğer Python dosyalarıyla aynı klasöre taşımak yararlı olabileceğini düşünüyorum. Bu şekilde, Python dosyası yazılır ve .db dosyalarından gelen SQLite kabuğu aynı yolda olur.


5

".Schema" komando, söz konusu tabloları oluşturmak için kullanılan ifadeyi göstererek kullanılabilir tabloları ve satırlarını listeler:

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

1

Tüm veritabanlarını görmek için .da - biri ' ana '

Bu veritabanının tabloları tarafından görülebilir

Sqlite_master siparişinden farklı tbl_name komutunu 1 SEÇ;

Ekli veritabanları ATTACH ifadesinde AS ile seçtiğiniz öneklere ihtiyaç duyar, örneğin aa (, bb, cc ...);

Aa.sqlite_master siparişinden 1 farklı tbl_name seçin ;

Burada görünümleri de aldığınızı unutmayın. Bunları hariç tutmak için, "sipariş" ten önce type = 'table " ifadesini ekleyin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.