ATTACH සමඟ විවෘත කරන ලද SQLite දත්ත සමුදා ගොනුවක වගු ලැයිස්තුගත කරන්නේ කෙසේද?


1204

කුමක්ද SQL වගු ලැයිස්තු ගත කිරීම සඳහා භාවිතා කළ හැක, සහ එම වගු තුළ පේළි SQLite දත්ත ගොනු - මම එය අමුණා ඇත වරක් ATTACHමත විධාන SQLite 3 විධාන රේඛා උපකරණයක්?


1
ඔබට වගු පිළිබඳ සම්පූර්ණ තොරතුරු ලබා ගැනීමට මෙය උත්සාහ කරන්න http://www.sqlite.org/pragma.html#schema
පියියුෂ්

2
ඔබ උනන්දුවක් දක්වන්නේ නම් පහත දැක්වෙන්නේ sqlite සඳහා ප්‍රයෝජනවත් GUI ය: sqlitestudio.pl දත්ත සමුදායන්, වගු, ඉතා ඉක්මණින් විමසීමට ඔබට ප්‍රවේශය ලබා දෙන අතර හොඳ විමසුම් සංස්කාරකයක් ද ඇත ...
ජේම්ස් ඔරවේක්

17
.tablesවගු සඳහා සහ .schema ?TABLE?නිශ්චිත වගුවේ සැලැස්ම සඳහා.
එච් 6.

.table 'bank_%'හෝ .table '%_empl'උපසර්ග / උපසර්ග විමසීම සඳහා වලංගු සින්ටැක්ස්!
gavenkoa

Answers:


581

මෙම .tables, සහ .schema"සහකාරියක්" කර්තව්යයන් අමුණා දත්ත සමුදායන් බවට බලන්න එපා: ඔවුන් හුදෙක් විමසුම SQLITE_MASTERඇති "ප්රධාන" දත්ත සමුදාය සඳහා මේසය. එහි ප්රති sequently ලයක් වශයෙන්, ඔබ භාවිතා කළේ නම්

ATTACH some_file.db AS my_db;

එවිට ඔබ කළ යුතුයි

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

තාවකාලික වගු .tablesදෙකෙන් එකක්වත් නොපෙන්වන බව සලකන්න : ඒ සඳහා ඔබ ලැයිස්තු sqlite_temp_masterගත කළ යුතුය:

SELECT name FROM sqlite_temp_master WHERE type='table';

125
"SELECT name FROM sqlite_master WHERE type='table'"මට පමණක් වැඩ කරයි
vladkras

4
නම තෝරන්න my_db.sqlite_master WHERE type = 'table'; මෙය මට වැඩ නොකරයි (අමුණා ඇති ඩීබී සඳහා) එය දෝෂයක් ලෙස දක්වයි: එවැනි වගුවක් නොමැත "my_db.sqlite_master"
kanika

තාවකාලික වගු වලින් ඔබ අදහස් කළේ කුමක්ද? මම SQLite db ගොනුව විවෘත කළ විට යමක් තිබේද?
ඊවොක්ස්

තාවකාලික වගු යනු CREATE TEMPORARY TABLESQL විධාන සමඟ සාදන ලද ඒවාය . වත්මන් දත්ත සමුදා සම්බන්ධතාවය වසා ඇති විට ඒවායේ අන්තර්ගතය අතහැර දමනු ලබන අතර ඒවා කිසි විටෙකත් දත්ත සමුදා ගොනුවකට සුරකිනු නොලැබේ.
ඇන්තනි විලියම්ස්

1
Sqlite3 විධාන මාදිලිය යටතේ ධාවනය කර ATTACH "some_file.db" AS my_db; එය ක්‍රියාත්මක විය !
ජෝන්_ජේ

1281

SQLite දත්ත ගබඩාවක වගු බැලීමට පියවර කිහිපයක් තිබේ:

  1. ඔබේ දත්ත ගබඩාවේ වගු ලැයිස්තුගත කරන්න:

    .tables
  2. වගුව පෙනෙන ආකාරය ලැයිස්තුගත කරන්න:

    .schema tablename
  3. සම්පූර්ණ වගුව මුද්‍රණය කරන්න:

    SELECT * FROM tablename;
  4. පවතින සියලුම SQLite විමසුම් විධාන ලැයිස්තුගත කරන්න:

    .help

45
.tableහා .tablesදෙකම ඉඩ දෙනු ලැබේ. ඒ සඳහා .ta, sqlite3 නිසැකවම ඕනෑම විධානයක් පිළිගන්නා බැවින්, එය ද ක්‍රියාත්මක වනු ඇත. උදව් අනුව විධානයේ නම ඇත්ත වශයෙන්ම ".tables" (යමෙකු තවමත් අවධානය යොමු කරන්නේ නම්).
dbn

29
(මෙය පිළිගත් පිළිතුර විය යුතුය, එය දේවල් කිරීමට වඩාත්ම sqlite-y ක්‍රමය වේ).
dbn

6
.tablesඑක් දත්ත සමුදායක් විවෘත කළහොත් වගු පෙන්වන්නේ නැත, ATTACH '<path>' AS <name>;නමුත් ලේස්ගේ පිළිතුර එය කරයි. OP විසින් ATTACHING ගැන සඳහන් කර ඇති බැවින් ඔහු මෙම පිළිතුර නොපිළිගැනීම නිවැරදි යැයි මම විශ්වාස කරමි. සංස්කරණය කරන්න: ඇන්තනි සහ පහත දැක්වෙන අයද මෙය පෙන්වා දුන් බව දුටුවා.
ඇන්ටිප්ලෙක්ස්

2
bdbw: අවශ්‍ය නොවේ. ඔබ කරන්නේ SQLite හෝ MySQL (මගේ නඩුව) භාවිතා කළ හැකි DB එතුමකි. තවත් SQL-conform විධාන භාවිතා කිරීමෙන් වෙනත් භාෂාවලින් ඔතා තැබීම පහසු වනු ඇත, එවිට ඔබ DB- විකුණුම්කරුගේ විශේෂිත විධානයන් භාවිතා කරන්නේ නම්.
වැලන්ටින් හයිනිට්ස්

"... sqlite3 නිසැකවම ඕනෑම විධානයක් පිළිගනු ඇත ..." අවාසනාවකට සමහර විට එය නොපැහැදිලි විධානයන් ද පිළිගනී. උදාහරණයක් ලෙස,. හැකියාවන් ලැයිස්තුගත නොකරයි.

443

ඔබට sqlite_master වගුව හරහා යා යුතු බව පෙනේ , මේ ආකාරයට:

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

ඉන්පසු SELECTපේළි බැලීමට සමාන හෝ ඊට සමාන එක් එක් මේසය හරහා අතින් යන්න .

මෙම .DUMPසහ .SCHEMAවිධාන සියලු දී දත්ත සමුදාය බලන්න බවක් නො පෙනේ.


120
අනාගතයේදී භාවිතය සඳහා කියවීමට හෝ මතක තබා ගැනීමට පහසු දෙයක් නොවේ; buildin .tablesවිධානය වඩාත් බුද්ධිමත් ය

24
Ry ග්‍රිලීඩා: මෙය තිබියදීත් ඕනෑම SQL-API වෙතින් එය වලංගු SQL වන බැවින් භාවිතා කළ හැකිය. බිල්ට් විධාන සෑම තැනකම සහය නොදක්වයි.
වැලන්ටින් හයිනිට්ස්

2
@DoktorJ .tablesඅමුණා ඇති දත්ත ගබඩාවකින් වගු පෙන්වීම සඳහා වෙනස් කර තිබේද?
ලාස් වී. කාල්සන්

4
එම දත්ත ගබඩාවේ , ඔව්, නමුත් මෙම ප්‍රශ්නය වූයේ ඔබ අමුණා ඇති දත්ත ගබඩාවක වගු පෙන්වීමයි. මෙම තිබේ .tablesවිධාන මෙන්ම එම පෙන්වන්න විකරණය කොට?
Lasse V. Karlsen

4
දෝ! කියවීමේ අවබෝධය අසාර්ථකයි ... කෙසේ හෝ මට ATTACH යොමුව අල්ලා ගැනීමට නොහැකි විය ... දෙවරක්> _ <
Doktor J

163

සියලුම වගු පෙන්වීමට, භාවිතා කරන්න

SELECT name FROM sqlite_master WHERE type = "table"

සියලුම පේළි පෙන්වීමට, ඔබට අනුමාන කළ හැක්කේ ඔබට සියලු වගු හරහා නැවත සැකසිය හැකි අතර එක් එක් මත SELECT * කරන්න. නමුත් සමහර විට ඩම්ප් එකක් යනු ඔබ පසුපසින්ද?


16
ප්‍රශ්නයට සැබවින්ම ආමන්ත්‍රණය කළ එකම පිළිතුරට ස්තූතියි ... "කුමක්ද SQL", කුමන විධානය භාවිතා කළ හැකිද යන්න නොවේ ... ස්තූතියි!
බ්‍රැඩ් පාර්ක්ස්

එසේම, මෙය එක් පේළියකට එක් වගු නාමයක් මුද්‍රණය කරන අතර .Tables විසින් වගු නාමවල තීරු කිහිපයක් මුද්‍රණය කරයි (කරදරකාරී / ප්‍රයෝජනවත් නොවේ).
ෂේන්

68

.helpපවතින විධාන සඳහා පරීක්ෂා කිරීමට භාවිතා කරන්න .

.table

මෙම විධානය මඟින් ඔබගේ වත්මන් දත්ත සමුදාය යටතේ ඇති සියලුම වගු පෙන්වනු ඇත.


අමුතුයි, එය නිවැරදි විය යුතුයි, නමුත් මම එය භාවිතා කරන විට ක්‍රියා කරන්නේ නැහැ
Jgenrgen K.

42

SQLite විධාන රේඛාවේ මේ සඳහා විධානයක් ඇත:

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

එය පහත 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

36

වගු ලැයිස්තුගත කිරීම සඳහා ඔබට ද කළ හැකිය:

SELECT name FROM sqlite_master
WHERE type='table';

ඉතින් ... cur.execute(""" SELECT name FROM sqlite_master WHERE type='table';""")නැත්ද? එය මට වැඩ කරන්නේ නැත, නමුත් මෙම කේතය ක්‍රියාත්මක කළ යුත්තේ කොතැනදැයි මට විශ්වාස නැත.
jbuddy_13

32

Http://www.sqlite.org/pragma.html#schema උත්සාහ කරන්නPRAGMA table_info(table-name);


2
මෙය කිරීමට හොඳම ක්‍රමය මෙය විය හැකිය.
ඇලික්ස් ඇක්සෙල්

7
මෙය ක්‍රියාත්මක වන්නේ ඔබ වගුවේ නම දන්නේ නම් පමණි. වගු නම් ලැයිස්තුව ලබා ගැනීමට ඔබට මෙය භාවිතා කළ නොහැක.
එරික් ඩබ්ලිව්

25

එය ලබා ගැනීම සඳහා මම මෙම විමසුම භාවිතා කරමි:

SELECT name FROM sqlite_master WHERE type='table'

සහ iOS හි භාවිතා කිරීමට:

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

16

ප්‍රලේඛනයට අනුව , MySQL වලට සමාන SHOW TABLES;වන්නේ:

".Tables" විධානය ලැයිස්තු ප්‍රකාරය සැකසීමට සමාන වන අතර පහත සඳහන් විමසුම ක්‍රියාත්මක කරයි:

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;

කෙසේ වෙතත්, ඔබ තනි වගුවක් තිබේදැයි පරීක්ෂා කරන්නේ නම් (හෝ එහි විස්තර ලබා ගැනීමට), @LuizGeron පිළිතුර බලන්න .


15

SQLite 3 හි නවතම අනුවාදයන් අනුව ඔබට නිකුත් කළ හැකිය:

.fullschema

ඔබගේ සියලු ප්‍රකාශන ප්‍රකාශ බැලීමට.


SQLite අනුවාදය 3.7.13 2012-07-17 17:46:21 උපදෙස් සඳහා ".help" ඇතුළත් කරන්න SQL ප්‍රකාශයන් ";" සමඟ අවසන් කරන්න. sqlite> .fullschema දෝෂය: නොදන්නා විධානය හෝ අවලංගු තර්ක: "fullschema". උදව් සඳහා ".help" ඇතුළත් කරන්න
මොනා ජලාල්

2
ඔබ 2012 සිට අනුවාදයක් භාවිතා කරයි
ගම්මිරිස්

12

මෙය කිරීමට ඇති පහසුම ක්‍රමය .dumpනම් SQLite 3 shell මෙවලම ක්‍රියාත්මක කිරීමෙන් පසු එය ඇමිණීමට වඩා දත්ත සමුදාය කෙලින්ම විවෘත කර විධානය භාවිතා කිරීමයි .

ඉතින් ... (ඔබේ OS විධාන රේඛා විමසුම $ යැයි උපකල්පනය කරන්න) $sqlite3:

sqlite3> ATTACH database.sqlite as "attached"

ඔබේ OS විධාන රේඛාවෙන්, දත්ත සමුදාය කෙලින්ම විවෘත කරන්න:

$sqlite3 database.sqlite
sqlite3> .dump

11

A හරහා union all, සියලු වගු එක් ලැයිස්තුවකට ඒකාබද්ධ කරන්න.

select name
from sqlite_master 
where type='table'

union all 

select name 
from sqlite_temp_master 
where type='table'


7

SQLite හි නිල සඳහන ගැන කිසිවෙකු සඳහන් කර නොමැති බැවින්, මෙම මාතෘකාව යටතේ එය යොමු කිරීම ප්‍රයෝජනවත් විය හැකි යැයි මම සිතමි:

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

මෙම සබැඳියේ විස්තර කර ඇති විධාන භාවිතයෙන් ඔබට ඔබේ දත්ත සමුදාය හැසිරවිය හැකිය. ඊට අමතරව, ඔබ වින්ඩෝස් මෙහෙයුම් පද්ධතිය භාවිතා කරන්නේ නම් සහ විධාන කවචය කොහේදැයි නොදන්නේ නම්, එය SQLite අඩවියේ ඇත:

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

එය බාගත කිරීමෙන් පසු, SQLite විධාන කවචය ආරම්භ කිරීම සඳහා sqlite3.exe ගොනුව ක්ලික් කරන්න . එය ආරම්භ කළ විට, පෙරනිමියෙන් මෙම SQLite සැසිය භාවිතා කරන්නේ තැටියේ ගොනුවක් නොව මතකයේ ඇති දත්ත සමුදායක් වන අතර එම නිසා සැසිය පිටවන විට සියලු වෙනස්කම් නැති වේ. අඛණ්ඩ තැටි ගොනුවක් දත්ත සමුදාය ලෙස භාවිතා කිරීමට, ටර්මිනල් කවුළුව ආරම්භ වූ වහාම ".open ex1.db" විධානය ඇතුළත් කරන්න.

ඉහත උදාහරණය "ex1.db" නම් වූ දත්ත සමුදා ගොනුව විවෘත කර භාවිතා කිරීමට හේතු වන අතර එය කලින් නොතිබුනේ නම් නිර්මාණය වේ. ගොනුව ඇති බව ඔබ සිතන නාමාවලියෙහි ඇති බව සහතික කිරීම සඳහා ඔබට සම්පූර්ණ මාර්ග නාමයක් භාවිතා කිරීමට අවශ්‍ය විය හැකිය. ඩිරෙක්ටරි බෙදුම්කරු අක්‍ෂරය ලෙස ඉදිරි-කප්පාදුව භාවිතා කරන්න. වෙනත් වචන වලින් කිවහොත් "c: /work/ex1.db" භාවිතා කරන්න, "c: \ work \ ex1.db" නොවේ.

ඔබ කලින් තෝරාගත් දත්ත ගබඩාවේ ඇති සියලුම වගු බැලීමට , ඉහත සබැඳියේ සඳහන් පරිදි .tables විධානය ටයිප් කරන්න .

ඔබ වින්ඩෝස් හි වැඩ කරන්නේ නම්, මෙම sqlite.exe ගොනුව අනෙක් පයිතන් ගොනු සමඟ එකම ෆෝල්ඩරයකට ගෙන යාම ප්‍රයෝජනවත් වනු ඇතැයි මම සිතමි. මේ ආකාරයට, පයිතන් ගොනුව ලියන අතර .db ගොනු වලින් SQLite කවචය කියවනු ලබන්නේ එකම මාවතක ය.


5

".Schema" කමාන්ඩෝ මඟින් ලබා ගත හැකි වගු සහ ඒවායේ පේළි ලැයිස්තුගත කරනු ඇත.

sqlite> table_a සාදන්න (id int, a int, b int);
sqlite> .schema table_a
වගුව වගුව සාදන්න (id int, a int, b int);

1

.da සියලු දත්ත සමුදායන් බැලීමට - එකක් ' ප්‍රධාන ' ලෙස හැඳින්වේ

මෙම දත්ත සමුදායේ වගු දැකිය හැකිය

Sqlite_master අනුපිළිවෙලින් tbl_name 1 කින් තෝරන්න;

අමුණා ඇති දත්ත සමුදායන් සඳහා ඔබ AS සමඟ තෝරාගත් උපසර්ග අවශ්‍ය වේ ATTACH උදා: aa (, bb, cc ...) එසේ:

Aa.sqlite_master අනුපිළිවෙලින් 1 කින් වෙනස් tbl_name තෝරන්න ;

මෙහිදී ඔබට ද අදහස් ලැබෙන බව සලකන්න. මේවා බැහැර කිරීම සඳහා 'ඇණවුමට' පෙර = 'වගුව' ටයිප් කරන්න

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.