it-swarm-tr.com

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

Bir SQLite veritabanı dosyasındaki tabloları ve bu tabloların içindeki satırları listelemek için hangi SQL kullanılabilir - SQLite 3 komut satırı aracında ATTACH komutunu ekledikten sonra?

1113
izb

.tables ve .schema "yardımcı" işlevleri ATTACHed veritabanlarına bakmaz: "ana" veritabanı için SQLITE_MASTER tablosunu sorgularlar. Sonuç olarak, eğer kullandıysanız

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 .tables ile görünmediğini unutmayın: bunun için sqlite_temp_master listelemeniz gerekir:

SELECT name FROM sqlite_temp_master WHERE type='table';
524
Anthony Williams

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

  1. Veritabanındaki tabloları listele:

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

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

    SELECT * FROM tablename;
    
  4. Mevcut SQLite İstemi komutlarının tümünü listele:

    .help
    
1233
Mark Janssen

Şunun gibi sqlite_master table üzerinden gitmeniz gerekiyor gibi görünüyor:

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

Ve daha sonra el ile her tabloyu bir SELECT veya benzeri satırlara bakmak için gözden geçirin.

.DUMP ve .SCHEMA komutları, veritabanını hiç görmemiş gibi görünür.

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 SEÇİM * yapabilirsiniz. Ama belki bir DÖKÜM ne peşindesiniz?

153
Christian Davén

Kullanılabilir komutları kontrol etmek için .help kullanın.

.table

Bu komut mevcut veritabanınızın altındaki tüm tabloları gösterir.

68
Antony.H

SQLite komut satırında bunun için bir komut var:

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

Aşağıdaki SQL'e 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
40
flubba

Tabloları listelemek için ayrıca:

SELECT name FROM sqlite_master
WHERE type='table';
36
Rafał Dowgird

PRAGMA table_info(table-name); öğesini dene
http://www.sqlite.org/pragma.html#schema

29
Luiz Geron

Bunu almak için bu sorguyu kullanıyorum:

SELECT name FROM sqlite_master WHERE type='table'

Ve iOS'ta kullanmak için:

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

belgelerine göre, MySQL'in SHOW TABLES; 'un karşılığı:

".Tables" komutu liste modunu ayarlamaya benzer ve ardından aşağıdaki sorguyu çalış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;

Bununla birlikte, tek bir tablonun olup olmadığını kontrol ediyorsanız (veya ayrıntılarını almak için), bkz. @LuizGeron answer.

15
Alix Axel

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

.fullschema

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

15
pepper

Bunu yapmanın en kolay yolu, veritabanını doğrudan açmak ve SQLite 3 Shell aracını çağırdıktan sonra eklemek yerine .dump komutunu kullanmaktır.

Yani ... (işletim sistemi komut satırınızın İsteminin $ olduğunu varsayalım) $sqlite3 yerine:

sqlite3> ATTACH database.sqlite as "attached"

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

$sqlite3 database.sqlite
sqlite3> .dump
11
Noah

Bir union all aracılığıyla tü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
openwonk

Kullanın:

import sqlite3

TABLE_LIST_QUERY = "SELECT * FROM sqlite_master where type='table'"
9
Mrityunjay Singh

Kimse resmi SQLite referansından bahsetmediğinden, bu başlık altında atıfta bulunmanın faydalı olabileceğini düşünüyorum:

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

Veritabanınızı bu linkte açıklanan komutları kullanarak değiştirebilirsiniz. Ayrıca, Windows işletim sistemi kullanıyorsanız ve Shell komutunun nerede olduğunu bilmiyorsanız, SQLite sitesinde:

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

İndirdikten sonra, SQLite komutunu başlatmak için sqlite3.exe dosyasını tıklayın Shell . Başlatıldığında, varsayılan olarak bu SQLite oturumu diskteki bir dosyayı değil, bellekteki bir veritabanını kullanıyor ve bu nedenle oturum sona erdiğinde tüm değişiklikler kaybolacak. 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çılıp kullanılmasına ve önceden mevcut değilse 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ı karakteri olarak eğik çizgi kullanın. Diğer 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 söylendiğ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ı olabilir. Bu şekilde, Python dosyası yazıyor ve SQLite Shell .db dosyalarından okuyor aynı yolda.

7
oiyio

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

 sqlite> table_a oluştur (id int, bir int, b int); 
 sqlite> .schema table_a 
 CREATE TABLE tablo_a (id int, bir int, b int); 
5
trf

.da tüm veritabanlarını görmek için - bir ' main ' adında bir

bu veritabanının tabloları

Sqlite_master sırasından farklı tbl_name SELECT 1;

Ekli veritabanları, ATTACH deyiminde AS ile seçtiğiniz öneklere ihtiyaç duyar. aa (, bb, cc ...) öyleyse:

SELECT farklı tbl_name aa.sqlite_master order by 1;

Burada da görüş aldığınızı unutmayın. Bunları hariç tutmak için where type = 'table' 'order' dan önce

1
Klaas-Z4us-V