قواعد البيانات SQLite والبايثون – كيف تُنشئ قاعدة بيانات وتتعامل معها

طريقة انشاء قاعدة بيانات sql بإستخدام البايثون - بايثونات

قواعد البيانات SQLite هي أحد أشهر أنواع قواعد البيانات، فهي تتمتع بالعديد من المزايا التي جعلتها مناسبة جدًا للعديد من الحالات. SQLite هي محرك قاعدة بيانات سهل الاستخدام وخفيف للغاية، ولا تحتاج لإعدادت سيرفر أو أي إعدادات أخرى فهي zero configuration. نُرحب بكم في هذا المقال الجديد من بايثونات والذي من خلاله نتطرق إلى كيفية التعامل مع هذا النوع من قواعد البيانات.

ما هي قاعدة البيانات SQLite ؟

في الكثير من الأحيان نحتاج لحفظ بيانات مُهيكلة Structured في ملف او مصدر تخزين بيانات. هذه الحالة تحدث مرارًا وتكرارًا، مثلا، عند حفظ بيانات تطبيق سطح مكتب، أو إعدادات نظام محلي أو تطبيق جوال والعديد من الحالات. تأتي SQLite كحل سهل وبسيط وغير مكلف لذلك.

SQLite هي أحد أشهر أنواع قواعد البيانات مفتوحة المصدر غير المعقدة والتي يتم حفظ جميع تفاصيلها (من تعريف الجداول وحتى البيانات) داخل ملف واحد. تم بناء قاعدة البيانات باستخدام لغة C مما يُفسر السرعة العالية في التعامل معها. يُمكنك تحميل SQLite من خلال الرابط التالي:

تحميل قواعد بيانات SQLite

كما يُمكنك الإطلاع على الشيفرة البرمجية المفتوحة لها من خلال الرابط التالي:

الشيفرة المفتوحة لقاعدة بيانات SQLite

ولكن من المهم التنبيه أننا عند التعامل مع بايثون، لن نحتاج لتحميل SQLite، فهي مُضمنة تلقائيًا منذ الإصدار 2.5.

اقرأ أيضًا: لغة بايثون للمبتدئين – سلسلة بايثونات

 

database relationships

مميزات SQLite

  1. خفيفة: يُمكن تضمينها واستخدامها في أجهزة الجوال، التلفزيونات الذكية، الأجهزة والقطع الالكترونية البيتية، الكاميرات الذكية وما إلى ذلك.
  2. أداء عالي: لديها سرعة عالية في القراءة والكتابة، فهي 35% أسرع من القراءة والكتابة من ملفات النظام العادية، كما أنها تُحمل البيانات فقط وقت الحاجة إليها.
  3. لا تحتاج عملية تثبيت: حيث لا تحتاج إلى إعدادات او عملية تثبيت، كُل ما هو مطلوب هو أن تُحمل الملفات الخاصة بها على جهازك الحاسوب وبعدها يُمكن استخدامها بكل سهولة.
  4. الاعتمادية: تقوم SQLit بتحديث البيانات أولًا بأول، وبذلك، قد تضيع بيانات قليلة عند حدوث فشل النظام وتعطله فجأة (وقد لا تفقد بيانات من الأساس).
  5. لغات برمجة عديدة: أغلب لغات البرمجة تُقدم الإمكانيات اللازمة للتعامل مع قاعدة بيانات SQLite.

كما يُوجد العديد من المميزات الأخرى التي نتركها لكم للتعرف عليها أثناء استخدامكم الفعلي لقاعدة بيانات SQLite.

ما الذي لا تقدمه SQLite ؟

SQLite مناسبة لبعض الحالات العملية، ولكنها غير مناسبة ولا يصلح استخدامها في بعض الحالات الأخرى. النقاط التالية تُوضح لك بعض العيوب:

  • لا تدعم بعض خصائص قواعد البيانات العلائقية في SQL. يُمكنكم التعرف أكثر من خلال زيارة التوثيق الرسمي لقاعدة البيانات: مالخصائص التي لا تدعمها SQLite؟
  • عندما تكون متصلًا بقاعدة البيانات SQLite لإجراء عمليات الكتابة، فإن قاعدة البيانات تكون مقفلة ولا يمكن الكتابة عليها. لا تسمح قاعدة بيانات SQLite بأكثر من اتصال واحد في الوقت الواحد، لذا فهي غير مناسبة للتطبيقات التي تتضمن أكثر من مستخدم متصل بها.
  •  لا تدعم SQLite بعض أنواع البيانات المتقدمة والمعروفة لدى لغات برمجة.

إنشاء قاعدة SQLite بيانات في البايثون

كما ذكرنا في البداية، فإن بايثون تتضمن مكتبة معيارية للتعامل مباشرة مع SQLite، وللتعامل معها، فإن أول شيء يجب علينا فعله هو استيراد المكتبة ثم انشاء عنصر يُمثل الاتصال مع قاعدة البيانات:

[pastacode lang=”python” manual=”import%20sqlite3%0A” message=”” highlight=”” provider=”manual”/]

تعمل الدالة connect على إعادة عنصر من نوع Connection الذي يُمثل قناة الاتصال مع قاعدة البيانات، ويحتوي العديد من الخصائص والدوال التي نستخدمها في تعاملنا مع قاعدة البيانات. لإنشاء قاعدة البيانات، نُمرر للدالة connect المسار الخاص بقاعدة البيانات + الاسم، وعند استدعاءها سيتم انشاء قاعدة البيانات اذا لم تكن منشأة من قبل في المسار، واذا كانت موجودة من قبل، فسيتم فتح قناة الاتصال معها:

[pastacode lang=”python” manual=”%23%20%D8%A5%D9%86%D8%B4%D8%A7%D8%A1%20%D9%82%D8%A7%D8%B9%D8%AF%D8%A9%20%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA%0Aconnection%20%3D%20sqlite3.connect(‘myDB.db’)” message=”” highlight=”” provider=”manual”/]

بعد تنفيذ السطر السابق، وبإفتراض أنه لا يُوجد ملف قاعدة بيانات باسم myDB.db في المسار الحالي، سيتم انشاء ملف قاعدة البيانات.

بعد أن أنشأنا قاعدة البيانات وفتحنا قناة الاتصال معها، سنعمل على تعريف جدول بداخلها. الأمر التالي هو الصيغة العامة لإنشاء جدول في قاعدة البيانات:

[pastacode lang=”sql” manual=”CREATE%20TABLE%20table_name%20(%0A%20%20%20%20column1%20datatype%20%5Bconstraint%5D%2C%0A%20%20%20%20column2%20datatype%20%5Bconstraint%5D%2C%0A%20%20%20%20column3%20datatype%20%5Bconstraint%5D%2C%0A%20%20%20….%0A)%3B” message=”” highlight=”” provider=”manual”/]

لتنفيذ أمر انشاء جدول جديد بداخل قاعدة البيانات التي أنشأنها باسم myDB.db، نٌعرف في البداية ما يُسمى cursor وهو الكائن المسؤول عن تنفيذ جُمل SQL  والتعامل مع النتائج. يُوجد عدة دوال يُمكن استخدمها من خلال cursor لتنفيذ جُمل SQL والتعامل مع نتائجها.

المثال التالي يُوضح كيفية إنشاء قاعدة بيانات جديدة باسم Pythonat ثم إنشاء جدول باسم Article. بعد إنشاء الجدول، نستعلم عن الجداول الموجودة في قاعدة البيانات، للتأكد من وجود الجدول الجديد:

[pastacode lang=”python” manual=”import%20sqlite3%20as%20sq%0A%0A%23%D8%A5%D9%86%D8%B4%D8%A7%D8%A1%20%D9%82%D8%A7%D8%B9%D8%AF%D8%A9%20%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA%20%0Acon%20%3D%20sq.connect(‘pythonat.db’)%0A%0A%23%20%D8%AA%D8%B9%D8%B1%D9%8A%D9%81%20cursor%0Acur%20%3D%20con.cursor()%0A%0A%23%D8%AA%D8%B9%D8%B1%D9%8A%D9%81%20%D8%AC%D8%AF%D9%88%D9%84%20%D8%A7%D9%84%D9%85%D9%82%D8%A7%D9%84%D8%A7%D8%AA%0A%23%20Artcile%0Acreate_command%20%3D%20”’CREATE%20TABLE%20article%20(%20%0A%09%20%20%20%20%09%20article_id%20INTEGER%20PRIMARY%20KEY%2C%0A%09%09%20%20%20%20%20article_txt%20TEXT%20NOT%20NULL)”’%0A%0Acur.execute(create_command)%0A%09%09%20%20%20%0A%09%0A%23%20%D8%A7%D9%84%D8%AA%D8%A3%D9%83%D8%AF%20%D9%85%D9%86%20%D8%A5%D9%86%D8%B4%D8%A7%D8%A1%20%D8%A7%D9%84%D8%AC%D8%AF%D9%88%D9%84%20%D8%B9%D8%A8%D8%B1%20%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D8%B9%D9%84%D8%A7%D9%85%20%D8%B9%D9%86%20%D8%A7%D9%84%D8%AC%D8%AF%D8%A7%D9%88%D9%84%20%D8%A7%D9%84%D9%85%D9%88%D8%AC%D9%88%D8%AF%D8%A9%0Acur.execute(%22%22%22SELECT%20%0A%09%09%09%09name%20%0A%09%09%09%20FROM%20%0A%09%09%09%09sqlite_master%20%0A%09%09%09%20WHERE%20%0A%09%09%09%09type%20%3D’table’%20AND%20%20%0A%09%09%09%09name%20NOT%20LIKE%20’sqlite_%25’%20%22%22%22)%0Aprint(cur.fetchall())%0A%0A%23%D8%A7%D8%BA%D9%84%D8%A7%D9%82%20cursor%0Acur.close()%0A%09%09%20%20%20″ message=”” highlight=”” provider=”manual”/]

عند إنشاء قاعدة البيانات والجدول بدون أخطاء، ستكون نتيجة الشيفرة البرمجية السابقة كالتالي:

[pastacode lang=”bash” manual=”%5B(‘article’%2C)%5D” message=”” highlight=”” provider=”manual”/]

وبذلك يكون جدول Articles جاهزًا لإدخال البيانات فيه والتعديل عليه.

اقرأ أيضًا: مكتبات علم البيانات بالبايثون – أشهر 5 مكتبات

إجراء عمليات CRUD من خلال البايثون

المقصود بعمليات CRUD هي create, retrieve, update, delete وهي العمليات الأساسية المستخدمة في التعامل مع البيانات داخل قواعد البيانات.

اضافة سجل بيانات لجدول

لإضافة بيانات جديدة في جدول Article نستخدم جملة SQL المُسماة insert into table والصيغة العامة لها هي كالتالي:

[pastacode lang=”sql” manual=”INSERT%20INTO%20table%20(column1%2Ccolumn2%20%2C..)%0AVALUES(%20value1%2C%09value2%20%2C…)%3B” message=”” highlight=”” provider=”manual”/]

المثال التالي يوضح أمر SQL لإضافة سجل جديد لجدول article:

[pastacode lang=”sql” manual=”INSERT%20INTO%20article%20(article_id%2C%20article_txt)%0AVALUES(%201%2C%09’Pythonat%20article%201′)%3B” message=”” highlight=”” provider=”manual”/]

لتنفيذ الأمر السابق في البايثون، نُسند صيغة الأمر كنوع نصي لمتغير، ثم نُمرر المتغير للدالة execute كما يلي:

[pastacode lang=”python” manual=”insert_command%20%3D%20”’INSERT%20INTO%20article%20(article_id%2C%20article_txt)%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20VALUES(%201%2C%20%22Pythonat%20article%201%22)”’%0A%0Acur.execute(insert_command)%0A%0Acon.commit()” message=”” highlight=”” provider=”manual”/]

لتأكيد عملية الإضافة، نُنفذ الدالة commit الموجودة في كائن الإتصال. أوامر commit و rollback هي أوامر SQL للتحكم بـ transaction التي يتم تنفيذها واجراؤها في قاعدة البيانات.

اضافة مجموعة سجلات

أحد الطُرق التي يُمكن استخدامها في اضافة سجلات لجدول ما دفعةً واحدة، هي تكرار جُملة الإضافة لكل سجل داخل حلقة تكرارية، ولكن على ما يبدو أن تلك هي طريقة لا يُحبذها الكثير من المبرمجين، لما قد تُسببه من ارهاق في الكتابة وفهم الشيفرة البرمجية او بسبب عدم الكفاءة. تُقدم الوحدة المعيارية في بايثون sqlite3 خيار تنفيذ جُملة SQL أكثر من مرة بواسطة دالة واحدة واستدعاء واحد وهي دالة executemany. في المثال التالي، نُنشئ قائمة تحتوي سجلات نريد أن نضيفها لجدول Article من خلال دالة executemany:

[pastacode lang=”python” manual=”%23%20%D8%A7%D9%84%D8%B3%D8%AC%D9%84%D8%A7%D8%AA%20%D9%85%D8%AD%D9%81%D9%88%D8%B8%D8%A9%20%D9%81%D9%8A%20%D9%82%D8%A7%D8%A6%D9%85%D8%A9%0Adata%20%3D%20%5B%0A%09(2%2C%20’Article%20%23two%20txt’)%2C%0A%09(3%2C%20’Article%20%23three%20txt’)%2C%0A%09(4%2C%20’Article%20%23four%20txt’)%2C%0A%09(5%2C%20’Article%20%23five%20txt’)%2C%0A%5D%0A%0Acur.executemany(”’INSERT%20INTO%20article%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20VALUES%20(%3F%2C%3F)%20”’%2C%20data%0A)%0A%0Acon.commit()” message=”” highlight=”” provider=”manual”/]

تعديل سجل بيانات في جدول

نستخدم لتعديل سجلات جدول ما في SQL جملة update table. الصيغة العامة للجملة كما يلي:

[pastacode lang=”sql” manual=”UPDATE%20table%0ASET%20column_1%20%3D%20new_value_1%2C%0A%20%20%20%20column_2%20%3D%20new_value_2%0AWHERE%0A%20%20%20%20search_condition%20%0AORDER%20column_or_expression%0ALIMIT%20row_count%20OFFSET%20offset%3B” message=”” highlight=”” provider=”manual”/]

للتطبيق مثلًا، نريد أم نُعدل عمود article_txt بحيث يُصبح قيمته ‘dummy dummy dummy’ للسجل الذي له article_id يساوي 3. في المثال التالي نحفظ جملة SQL في متغير اسمه update_command ثم نُنفذ الجُملة باستخدام دالة execute:

[pastacode lang=”python” manual=”update_command%20%3D%20”’UPDATE%20article%20SET%20article_txt%20%3D%20%22dummy%20dummy%20dummy%22%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20WHERE%20article_id%20%3D%203%20”’%0A%0Acur.execute(update_command)%0A%0Acon.commit()” message=”” highlight=”” provider=”manual”/]

حذف سجل بيانات من جدول

الصيغة العامة لأمر الحذف في SQL هي كالتالي:

[pastacode lang=”sql” manual=”DELETE%20FROM%20table%0AWHERE%20search_condition%3B” message=”” highlight=”” provider=”manual”/]

في مثالنا، لحذف السجل الذي يمتلك article_id بقيمة 5 مثلًا، نكتب الشيفرة البرمجية التالية:

[pastacode lang=”python” manual=”delete_command%20%3D%20”’%20DELETE%20FROM%20article%0A%09%09%09%09%09%20WHERE%20article_id%20%3D%205%20”’%0A%0Acur.execute(delete_command)%0A%0Acon.commit()” message=”” highlight=”” provider=”manual”/]

الإستعلام عن البيانات في SQLite

يُمكن الاستعلام عن محتويات قاعدة البيانات بكل سهولة من خلال جُملة الاستعلام المشهورة في SQL والمُسماة SELECT. لقد فعلنا ذلك في بداية المقال عندما أردنا التأكد من إنشاء الجدول الذي عرَّفناه.

هنا نُضيف مجموعة أخرى من الأمثلة التي تُوضح طريقة الإستعلام عن البيانات في جدول Article بأكثر من طريقة:

[pastacode lang=”python” manual=”%23%20%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D8%B9%D9%84%D8%A7%D9%85%20%D9%88%D8%A7%D8%B1%D8%AC%D8%A7%D8%B9%20%D9%86%D8%AA%D9%8A%D8%AC%D8%A9%20%D9%88%D8%A7%D8%AD%D8%AF%D8%A9%0Asql_one%20%3D%20”’%20SELECT%20*%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20FROM%20article%0A%09%09%09%20%20WHERE%20article_id%20%3D%201%20”’%0A%0Acur.execute(sql_one)%0A%0Aprint(%20cur.fetchone())%0A%0A%23%20result%20%3D%3E%20(1%2C%20’Pythonat%20article%201′)%0A%0A%23%20%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D8%B9%D9%84%D8%A7%D9%85%20%D9%88%D8%A7%D8%B1%D8%AC%D8%A7%D8%B9%20%D8%AC%D9%85%D9%8A%D8%B9%20%D8%A7%D9%84%D8%B3%D8%AC%D9%84%D8%A7%D8%AA%20%D8%A7%D9%84%D9%86%D8%A7%D8%AA%D8%AC%D8%A9%0Asql_two%20%3D%20”’%20SELECT%20*%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20FROM%20article%20”’%0A%0Acur.execute(sql_two)%0A%0Aprint(%20cur.fetchall())%0A%0A%23%20%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D8%B9%D9%84%D8%A7%D9%85%20%D9%88%D8%A7%D9%84%D9%85%D8%B1%D9%88%D8%B1%20%D8%B9%D9%84%D9%89%20%D8%A7%D9%84%D9%86%D8%AA%D9%8A%D8%AC%D8%A9%20%D9%85%D9%86%20%D8%AE%D9%84%D8%A7%D9%84%20%D8%AD%D9%84%D9%82%D8%A9%20%D8%AA%D9%83%D8%B1%D8%A7%D8%B1%D9%8A%D8%A9%0Asql_three%20%3D%20”’%20SELECT%20*%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20FROM%20article%0A%09%09%09%20%20WHERE%20article_id%20%3C%3D%203”’%0A%0Afor%20row%20in%20cur.execute(sql_three)%3A%0A%09print(row)%0A%09%0A%09″ message=”” highlight=”” provider=”manual”/]

 

فتح قاعدة البيانات واستكشافها من خلال DB Browser

لتسهيل العمل، وللتعامل مع مجموعة من قواعد البيانات واستكشاف هيكليتها والتعديل عليها وعلى بياناتها، يُمكنك استخدام الأداة DB Browser For SQLite لذلك.

فتح قاعدة بيانات من خلال أداة db browser

 

استكشاف البيانات في قاعدة بيانات من خلال أداة db browser

اقرأ أيضًا: البرمجة البايثونية – كيف تكتب شيفرة برمجية بالبايثون بطريقة سليمة

إلى هنا ننتهي من مقالنا الذي نتمنى أن نكون وفقنا فيه. تعلمنا من خلال المقال كيفية التعامل مع قاعدة البيانات من نوع SQLite وطريقة انشاءها وتعريف جدول فيها وإجراء عمليات الإضافة والاستعلام والتعديل والحذف. نسعد بمشاركتكم وتفاعلكم من خلال الأسئلة والتعليقات ومشاركة المقال في وسائل التواصل الإجتماعي.

مقالات مشابهة

  • أساسيات قواعد البيانات الخمسة التي يجب أن يعرفها مهندس البرمجيات

    إن كونك مهندس برمجيات يتطلب منك أن تكون على دراية بالعديد من المفاهيم والمواضيع
    ابراهيم البحيصي
    By ابراهيم البحيصي
    تعرف على المزيد
  • تصميم قواعد بيانات اوراكل عملي بإستخدام البايثون - بايثونات

    قواعد البيانات الأوراكل والبايثون –كيف نتعامل مع الاوراكل من كود بايثون

    قواعد البيانات الأوراكل هي أحد أقوى قواعد البيانات، وتعتمد عليها الكثير من الشركات عالميًا.
    ابراهيم البحيصي
    By ابراهيم البحيصي
    تعرف على المزيد