كيفية إدراج الجداول في ملف قاعدة بيانات SQLite الذي تم فتحه باستخدام ATTACH؟

StackOverflow https://stackoverflow.com/questions/82875

  •  01-07-2019
  •  | 
  •  

سؤال

ما هو SQL الذي يمكن استخدامه لسرد الجداول والصفوف الموجودة داخل تلك الجداول في ملف قاعدة بيانات SQLite - بمجرد إرفاقه مع ATTACH الأمر على أداة سطر الأوامر SQLite 3؟

هل كانت مفيدة؟

المحلول

ال .tables, ، و .schema لا تبحث الوظائف "المساعدة" في قواعد البيانات المرفقة:هم فقط يستفسرون عن SQLITE_MASTER جدول لقاعدة البيانات "الرئيسية".وبالتالي، إذا كنت تستخدم

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';

نصائح أخرى

هناك بعض الخطوات لرؤية الجداول في قاعدة بيانات SQLite:

  1. قم بإدراج الجداول في قاعدة البيانات الخاصة بك:

    .tables
    
  2. اذكر كيف يبدو الجدول:

    .schema tablename
    
  3. طباعة الجدول بأكمله:

    SELECT * FROM tablename;
    
  4. قم بإدراج كافة أوامر موجه SQLite المتوفرة:

    .help
    

يبدو أنك بحاجة للذهاب من خلال sqlite_master الجدول، مثل هذا:

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

ثم انتقل يدويًا عبر كل جدول باستخدام a SELECT أو ما شابه ذلك للنظر في الصفوف.

ال .DUMP و .SCHEMA لا يبدو أن الأوامر ترى قاعدة البيانات على الإطلاق.

لإظهار كافة الجداول، استخدم

SELECT name FROM sqlite_master WHERE type = "table"

لإظهار جميع الصفوف، أعتقد أنه يمكنك التكرار عبر جميع الجداول وإجراء SELECT * على كل منها.ولكن ربما يكون DUMP هو ما تبحث عنه؟

يستخدم .help للتحقق من الأوامر المتاحة.

.table

سيُظهر هذا الأمر كافة الجداول الموجودة ضمن قاعدة البيانات الحالية.

يوجد أمر متاح لهذا في سطر أوامر 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

لسرد الجداول يمكنك أيضًا القيام بما يلي:

SELECT name FROM sqlite_master
WHERE type='table';

يحاول PRAGMA table_info(table-name);
http://www.sqlite.org/pragma.html#schema

أستخدم هذا الاستعلام للحصول عليه:

SELECT name FROM sqlite_master WHERE type='table'

وللاستخدام في iOS:

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

بحسب ال توثيق, ، أي ما يعادل MySQLs 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;

ومع ذلك، إذا كنت تتحقق من وجود جدول واحد (أو للحصول على تفاصيله)، راجع @لويزجيرون إجابة.

اعتبارًا من أحدث إصدارات SQLite 3، يمكنك إصدار ما يلي:

.fullschema

لرؤية جميع بيانات الإنشاء الخاصة بك.

أسهل طريقة للقيام بذلك هي فتح قاعدة البيانات مباشرة واستخدام ملف .dump الأمر، بدلاً من إرفاقه بعد استدعاء أداة Shell SQLite 3.

لذا...(افترض أن موجه سطر أوامر نظام التشغيل لديك هو $) بدلاً من $sqlite3:

sqlite3> ATTACH database.sqlite as "attached"

من سطر أوامر نظام التشغيل لديك، افتح قاعدة البيانات مباشرةً:

$sqlite3 database.sqlite
sqlite3> .dump

يستخدم:

import sqlite3

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

عبر أ union all, ، قم بدمج كافة الجداول في قائمة واحدة.

select name
from sqlite_master 
where type='table'

union all 

select name 
from sqlite_temp_master 
where type='table'

وبما أنه لم يذكر أحد عن المرجع الرسمي لـ SQLite، أعتقد أنه قد يكون من المفيد الإشارة إليه تحت هذا العنوان:

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

يمكنك التعامل مع قاعدة البيانات الخاصة بك باستخدام الأوامر الموضحة في هذا الرابط.بجانب، إذا كنت تستخدم نظام التشغيل Windows ولا أعرف أين توجد واجهة الأوامر الموجودة في موقع SQLite:

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

بعد تنزيله، انقر فوق ملف sqlite3.exe لتهيئة واجهة أوامر SQLite.عند تهيئتها، تستخدم جلسة SQLite هذه بشكل افتراضي قاعدة بيانات في الذاكرة، وليس ملفًا على القرص، وبالتالي سيتم فقدان جميع التغييرات عند إنهاء الجلسة.لاستخدام ملف قرص ثابت كقاعدة بيانات، أدخل الأمر ".open ex1.db" مباشرة بعد بدء تشغيل النافذة الطرفية.

يؤدي المثال أعلاه إلى فتح ملف قاعدة البيانات المسمى "ex1.db" واستخدامه وإنشائه إذا لم يكن موجودًا مسبقًا.قد ترغب في استخدام اسم مسار كامل للتأكد من وجود الملف في الدليل الذي تعتقد أنه موجود فيه.استخدم الخطوط المائلة للأمام كحرف فاصل الدليل.بمعنى آخر، استخدم "c:/work/ex1.db"، وليس "c:\work\ex1.db".

لرؤية جميع الجداول في قاعدة البيانات التي اخترتها مسبقًا، اكتب الأمر .الجداول كما هو مذكور في الرابط أعلاه.

إذا كنت تعمل على نظام التشغيل Windows، فأعتقد أنه قد يكون من المفيد نقل ملف sqlite.exe هذا إلى نفس المجلد مع ملفات Python الأخرى.بهذه الطريقة، يتم الكتابة إلى ملف Python وتكون قذيفة SQLite التي تقرأ من ملفات .db في نفس المسار.

سيقوم أمر ".schema" بإدراج الجداول المتاحة وصفوفها، من خلال إظهار العبارة المستخدمة لإنشاء الجداول المذكورة:

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

.da لرؤية كافة قواعد البيانات - واحدة تسمى 'رئيسي'

يمكن رؤية جداول قاعدة البيانات هذه بواسطة

حدد tbl_name المميز من sqlite_master بترتيب 1؛

تحتاج قواعد البيانات المرفقة إلى بادئات اخترتها مع AS في العبارة ATTACH، على سبيل المثال. أأ (، ب ب، سم مكعب ...) لذلك:

حدد tbl_name المميز من aa.sqlite_master الطلب بمقدار 1؛

لاحظ أنه هنا تحصل على وجهات النظر أيضًا.لاستبعاد هذه إضافة حيث اكتب = "جدول" قبل الامر'

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top