it-swarm-eu.dev

Jak seznam tabulek v databázi SQLite soubor, který byl otevřen s ATTACH?

Jaký SQL lze použít pro výpis tabulek a řádků v těchto tabulkách v databázovém souboru SQLite - jakmile je připojím příkazem ATTACH na nástroj příkazového řádku SQLite 3?

1113
izb

Funkce .tables a .schema "pomocník" se nedívají do databází ATTACHED: pouze dotazují tabulku SQLITE_MASTER pro "hlavní" databázi. V důsledku toho, pokud jste použili

ATTACH some_file.db AS my_db;

pak musíte udělat

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

Dočasné tabulky se nezobrazují ani s .tables: musíte zadat sqlite_temp_master:

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

Pro zobrazení tabulek v databázi SQLite existuje několik kroků:

  1. Seznam tabulek v databázi:

    .tables
    
  2. Seznam vzhledu tabulky:

    .schema tablename
    
  3. Vytisknout celou tabulku:

    SELECT * FROM tablename;
    
  4. Seznam všech dostupných příkazů SQLite Prompt:

    .help
    
1233
Mark Janssen

Zdá se, že je třeba projít tabulku sqlite_master takto:

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

A pak manuálně projděte každou tabulku s SELECT nebo podobným pohledem na řádky.

Příkazy .DUMP a .SCHEMA nezobrazují databázi vůbec.

Chcete-li zobrazit všechny tabulky, použijte

SELECT name FROM sqlite_master WHERE type = "table"

Chcete-li zobrazit všechny řádky, myslím, že můžete iterovat všemi tabulkami a na každém z nich provést SELECT *. Ale možná je DUMP to, po čem jste?

153
Christian Davén

Pomocí .help zkontrolujte dostupné příkazy.

.table

Tento příkaz by zobrazoval všechny tabulky pod vaší aktuální databází.

68
Antony.H

Na příkazovém řádku SQLite je k dispozici příkaz:

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

Převede následující SQL:

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

Pro zobrazení tabulek můžete také:

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

Zkuste PRAGMA table_info(table-name);
http://www.sqlite.org/pragma.html#schema

29
Luiz Geron

Tento dotaz používám k získání:

SELECT name FROM sqlite_master WHERE type='table'

A v systému iOS:

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

Podle dokumentace , ekvivalent MySQLs 'SHOW TABLES; je:

Příkaz ".tables" se podobá režimu nastavení seznamu a poté provede následující dotaz:

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;

Pokud však kontrolujete, zda existuje jedna tabulka (nebo chcete-li získat její podrobnosti), viz @LuizGeron answer.

15
Alix Axel

Jako nejnovější verze SQLite 3 můžete vydat:

.fullschema

zobrazit všechny vaše příkazy vytvořit.

15
pepper

Nejjednodušší způsob, jak toho dosáhnout, je otevřít databázi přímo a použít příkaz .dump, spíše než připojit jej po vyvolání nástroje SQLite 3 Shell.

Takže ... (předpokládej, že váš příkazový řádek operačního systému je Prompt je $) namísto $sqlite3:

sqlite3> ATTACH database.sqlite as "attached"

Z příkazového řádku operačního systému otevřete databázi přímo:

$sqlite3 database.sqlite
sqlite3> .dump
11
Noah

Prostřednictvím union all zkombinujte všechny tabulky do jednoho seznamu.

select name
from sqlite_master 
where type='table'

union all 

select name 
from sqlite_temp_master 
where type='table'
9
openwonk

Použití:

import sqlite3

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

Vzhledem k tomu, že se o oficiálním odkazu na SQLite nikdo nezmínil, myslím, že by mohlo být užitečné odkazovat na něj pod tímto nadpisem:

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

S databází můžete manipulovat pomocí příkazů popsaných v tomto odkazu. Kromě toho, pokud používáte operační systém Windows a nevíte, kde je příkaz Shell, tj. V místě SQLite:

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

Po jeho stažení klikněte na soubor sqlite3.exe, abyste inicializovali příkaz SQLite Shell . Když je inicializována, ve výchozím nastavení tato relace SQLite používá databázi v paměti, nikoli soubor na disku, takže všechny změny budou při ukončení relace ztraceny. Chcete-li použít soubor s trvalým diskem jako databázi, zadejte příkaz ".open ex1.db" ihned po spuštění okna terminálu.

Výše uvedený příklad způsobí, že soubor databáze s názvem "ex1.db" bude otevřen a použit a vytvořen, pokud dříve neexistuje. Chcete-li se ujistit, že se soubor nachází v adresáři, který je podle vašeho uvážení v souboru, můžete použít úplnou cestu. Použijte lomítka jako znak oddělovače adresářů. Jinými slovy použijte "c: /work/ex1.db", ne "c: ex1.db".

Chcete-li zobrazit všechny tabulky v databázi, kterou jste předtím vybrali, zadejte příkaz .tables , jak je uvedeno ve výše uvedeném odkazu.

Pokud pracujete ve Windows, myslím, že by mohlo být užitečné přesunout tento soubor sqlite.exe do stejné složky s ostatními soubory Pythonu. Tímto způsobem soubor Python zapisuje a SQLite Shell čte z .db souborů ve stejné cestě.

7
oiyio

Příkaz ".schema" zobrazí seznam dostupných tabulek a jejich řádků zobrazením výpisu použitého k vytvoření uvedených tabulek:

 sqlite> create table_a (id int, a int, b int); 
 sqlite> .schema table_a 
 CREATE TABLE table_a (id int, a int, b int); .____.]
5
trf

.da vidět všechny databáze - jeden nazvaný ' hlavní '

tabulky této databáze

SELECT odlišný název tbl_name z pořadí sqlite_master podle 1;

Připojené databáze potřebují prefixy, které jste vybrali v příkazu ASTACH např. aa (, bb, cc ...), takže:

SELECT odlišný tbl_name z aa.sqlite_master order by 1;

Všimněte si, že zde získáte také názory. Chcete-li vyloučit tyto přidat kde type = 'table' before 'order'

1
Klaas-Z4us-V