আমি কীভাবে এসকিউএল ডাটাবেসের জন্য একটি টেবিলের কলামগুলির তালিকা পেতে পারি?


102

আমি একটি টেবিলের কলামগুলির তালিকা পুনরুদ্ধার করতে চাই। ডাটাবেসটি এসকিউএলাইটের সর্বশেষ প্রকাশ (3.6, আমি বিশ্বাস করি)। আমি এমন কোড খুঁজছি যা এটি এসকিউএল কোয়েরি সহ করে। কলামগুলির সাথে সম্পর্কিত মেটাডেটার জন্য অতিরিক্ত বোনাস পয়েন্ট (যেমন দৈর্ঘ্য, ডেটা টাইপ ইত্যাদি ...)

উত্তর:


134

আপনি যা খুঁজছেন তাকে ডেটা ডিকশনারি বলা হয়। স্ক্লাইটে সমস্ত টেবিলের একটি তালিকা sqlite_master সারণী জিজ্ঞাসা করে (বা দেখুন?) পাওয়া যাবে

sqlite> create table people (first_name varchar, last_name varchar, email_address varchar);
sqlite> select * from sqlite_master;
table|people|people|2|CREATE TABLE people (first_name varchar, last_name varchar, email_address varchar)

কলামের তথ্য পেতে আপনি pragma table_info(table_name)বিবৃতিটি ব্যবহার করতে পারেন :

sqlite> pragma table_info(people);
0|first_name|varchar|0||0
1|last_name|varchar|0||0
2|email_address|varchar|0||0

প্রগমা বিবৃতি সম্পর্কে আরও তথ্যের জন্য ডকুমেন্টেশন দেখুন


5
গ্রেট! এখন কমান্ড লাইনের বাইরে থেকে কীভাবে এটি করা হয়? এটি আমার নিজের সি প্রোগ্রামের মধ্যে থেকে কীভাবে করা হয়?
অ্যারন ব্র্যাচার

আমি কিভাবে Objective-C উপরে হিসাবে একই বাস্তবায়ন করতে পারে
নাগ রাজ

2
@ নাগ, আমি আপনাকে ভাবব যে এসকিউএলাইটকে কেবল এই কমান্ডগুলিকে সাধারণ এসকিউএল হিসাবে বিবেচনা করা উচিত, সে অনুযায়ী এটি প্রক্রিয়া করুন এবং আপনাকে ফলাফলের সেটটি ফিরিয়ে দিন।
ব্রায়ান কাইল

স্ক্লাইটের পরিবর্তে কিছু ডট-শর্টকাট নেই select * from ?
jiggunjer

টেবিল থেকে * নির্বাচন করুন, যখন আপনি জানেন না যে টেবিলে কত রেকর্ড মিলিয়ন রেকর্ডের ফলস্বরূপ হতে পারে এবং সময় এবং সংস্থান গ্রহণ করে। আপনার "সীমা 1" বা এর মতো কিছু যুক্ত করা উচিত।
গাই ড্যাফনি

55

এখানে সহজ উপায়:

.schema <table>

4
এটি সত্যই উত্তর হওয়া উচিত।
এহতেশ চৌধুরী

19
@ এহতেশচৌধুরী এটি করা উচিত নয়, প্রশ্নটি এসকিউএল কোয়েরি চেয়েছে এবং এটি একটি নয়।
জাজপিআই

25

প্রশ্নটি পুরানো তবে নিম্নলিখিতটি এখনও উল্লেখ করা হয়নি।

অনেক ক্ষেত্রে আরেকটি সুবিধাজনক উপায় হ'ল শিরোনামগুলি চালু করে:

sqlite> .headers on

তারপর,

sqlite> SELECT ... FROM table

আউটপুটের শীর্ষে সমস্ত নির্বাচিত ক্ষেত্রগুলি (যদি আপনি নির্বাচন করেন তবে সমস্ত) একটি শিরোনাম প্রদর্শন করবে।


আমি আমার অনুমানটি সঠিক যে আসল সমস্যাটি ছিল যে sqlite3 ডিফল্টরূপে একটি কোয়েরির শিরোনাম সরবরাহ করে না, তারপরে এটিই আমরা সমাধান খুঁজছি । আপনার টেবিলটি যদি আপনার টার্মিনালে প্রদর্শিত না হয় তবে কেবল যুক্ত করুন, উদাহরণস্বরূপ LIMIT 5;শেষে ভুলবেন না ।
ফ্রেলাউ

16

শুধু আপনার স্ক্লাইট শেল প্রবেশ করুন:

$ sqlite3 path/to/db.sqlite3

এবং তারপর ঠিক আঘাত

sqlite> .schema

এবং আপনি সবকিছু পাবেন।


1
প্রশ্নটি একটি এসকিউএল কোয়েরি খুঁজছে।
এরিকা

13

এখানে একটি নির্বাচনী বিবৃতি যা বর্তমান ডাটাবেসে সমস্ত টেবিল এবং কলামগুলি তালিকাবদ্ধ করে:

SELECT m.name as tableName, 
       p.name as columnName
FROM sqlite_master m
left outer join pragma_table_info((m.name)) p
     on m.name <> p.name
order by tableName, columnName
;

ধন্যবাদ! যদি আপনি আপনার পরিবর্তন আপনি স্কিমা দ্বারা আদেশ দিতে পারেন ORDER BYকরতে tableName, p.cid
মিঃ মি

7

এটি এমন একটি কোয়েরি যা তাদের কলামগুলির সাথে সমস্ত সারণী তালিকাবদ্ধ করে এবং ওপি অনুরোধ হিসাবে (বোনাস পয়েন্ট হিসাবে) প্রতিটি কলাম সম্পর্কে আমি পেতে পারি এমন সমস্ত মেটাডেটা।

SELECT
  m.name AS table_name, 
  p.cid AS col_id,
  p.name AS col_name,
  p.type AS col_type,
  p.pk AS col_is_pk,
  p.dflt_value AS col_default_val,
  p.[notnull] AS col_is_not_null
FROM sqlite_master m
LEFT OUTER JOIN pragma_table_info((m.name)) p
  ON m.name <> p.name
WHERE m.type = 'table'
ORDER BY table_name, col_id

কীভাবে pragma_table_infoকোনও ক্যোয়ারিতে কাজ করতে হয় তা আমাকে দেখানোর জন্য @ ডেভিড গারআটকে ধন্যবাদ জানাই ।

সমস্ত টেবিল মেটাডেটা দেখতে এই কোয়েরিটি চালান:

SELECT * FROM sqlite_master WHERE type = 'table'

1

উপরের দিকে বিল্ডিং করা, আপনি একবারে এটি সব করতে পারেন:

sqlite3 yourdb.db ".schema"

এটি আপনাকে সারণী তৈরি করতে এসকিউএল দেবে যা কার্যকরভাবে কলামগুলির একটি তালিকা।


0

আমি জানি, এটি অনেক দিন হয়ে গেছে তবে খুব বেশি দেরি হয়নি ... দোভাষী হিসাবে এবং বেশ কয়েকটি অনুসন্ধানের পরেও আমার কাছে একই প্রশ্ন ছিল, আমার পক্ষে ভাল কিছু পাওয়া যায় নি। সুতরাং আমি আপনার ডিবি "প্রধান" তা জেনেও প্রাগামার উপর ভিত্তি করে কিছু প্রস্তাব করছি

db eval { PRAGMA main.table_info(<your table name>) } TBL { puts $TBL(name) }

এবং তালিকা পেতে অ্যারে ব্যবহার করুন

set col_list {}
db eval { PRAGMA main.table_info(<your table name>) } TBL { lappend col_list $TBL(name) }
puts $col_list
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.