معرفی دیتابیس TinyDB مخصوص پایتون
ﺯﻣﺎﻥ ﻣﻄﺎﻟﻌﻪ: 8 دقیقه

معرفی دیتابیس TinyDB مخصوص پایتون

زمانی که با یک زبان برنامه نویسی کار می‌کنید بسیار لازم خواهد بود که کار کردن با دیتابیس را نیز بلد باشید. هر پروژه‌ای که شما ایجاد می‌کنید فارغ از آنکه در چه مقیاسی باشد، حاوی حجم متفاوتی از داده است. این داده‌ها نیز نیاز دارند که مدیریت شوند.

کلاسیک‌ترین و ثابت‌ترین روش برای مدیریت داده‌های یک اپلیکیشن استفاده از یک بانک اطلاعاتی است. بانک‌های اطلاعاتی بسیار زیادی در دنیا وجود داشته که در دسته‌بندی‌های مختلفی ارائه می‌شوند و هر کدام مزایا و معایب منحصر به فرد خودشان را دارند.

در این بین دیتابیس‌هایی وجود داشته که بیشتر برای تست و توسعه اپلیکیشن مورد استفاده قرار می‌گیرند و در مرحله اجرا چندان گزینه درستی به شمار نمی‌روند. برای مثال دیتابیس SQLite از جمله این دیتابیس‌هاست.

امروز در این مطلب از وبسایت راکت قصد داریم دیتابیس جدیدی را به شما معرفی کنیم که به صورت تمام و کمال با زبان برنامه نویسی پایتون توسعه یافته و هیچ وابستگی خارجی به دیگر ابزارها و زبان‌ها ندارد. این دیتابیس از مدل دیتابیس Document-oriented پشتیبانی کرده و یک دیتابیس NoSQL به حساب می‌آید.

با نگاهی کلی به این دیتابیس و مستندات آن می‌توان متوجه شد که استفاده از آن بسیار ساده بوده و در واقع یک پروژه تفریحی بسیار کاربردی نیز به شمار می‌رود. دارا بودن سیستم API ساده و در عین حال قدرتمند (در مقیاس خود) باعث شده تا به یک دیتابیس مناسب برای یادگیری افراد مبتدی نیز تبدیل شود.

اما در کنار تمام مزایایی که دارد، TinyDB مطابق با مستندات خود، در برخی از موارد کاربردی عمل نکرده و بهتر است در چنین شرایطی از آن استفاده نکنیم. این شرایط را می‌توانید در زیر مشاهده کنید:

  • اگر قصد دسترسی به بانک اطلاعاتی از طریق یک برنامه Multi-Thread را دارید
  • اگر قصد ایجاد قابلیت ایندکسینگ برای جداول را دارید
  • اگر در یک برنامه مبتنی بر HTTP از آن استفاده می‌کنید (تحت وب)
  • اگر قصد برخورد با آن به شکل یک دیتابیس رابطه‌ای را دارید
  • اگر دنبال یک روش بهینه برای مدیریت ACID را دارید

در شرایط گفته شده TinyDB نمی‌تواند انتخاب مناسبی برای شما باشد. بنابراین بهتر است دنبال جایگزین دیگری برای این مسئله باشید.

چگونه TinyDB را نصب کنیم؟

نصب کردن TinyDB درست مانند تمام پکیج‌های پایتونی تنها با استفاده کردن از دستور pip امکان پذیر است. بنابراین برای نصب این دیتابیس کافی‌ست دستور زیر را وارد کنید:

pip install tinydb

چگونه از TinyDB استفاده کنیم؟

برای نمایش شیوه کاری این دیتابیس قصد داریم که کل روند آموزش را با استفاده از یک پروژه ساده لیستTo-Do  پیش ببریم. در این اپلیکیشن ما عملیات‌های Create-Read-Update-Delete را انجام خواهیم داد تا شما شیوه انجام چهار عمل اصلی را با استفاده از این دیتابیس مشاهده کنید.

قبل از شروع کار یک نکته بسیار مهم را نیز باید به شما بگویم: TinyDB تمام اطلاعات را در فایل JSON ذخیره کرده و شکل ذخیره اطلاعات نیز در همان فرمت است.

در قدم اول نیاز است که کتابخانه tinydb را به فایل پایتونی خودمان import کنیم. برای انجام اینکار وارد کردن دستور زیر و اضافه کردن کلاس TinyDB کافی خواهد بود.

from tinydb import TinyDB

در مرحله دوم یک فایل json را از طریق کلاس TinyDB ایجاد می‌کنیم. برای اینکار خط زیر را به فایل پایتونی اضافه کنید:

db = TinyDB("todo_db.json")

حال اپلیکیشن پایتونی شما یک دیتابیس را به خود متصل کرده و آماده انجام عملیات‌های مربوط به افزودن-ویرایش-حذف کردن و... است.

چگونه داده جدیدی را وارد کنیم؟

نزدیک‌ترین ساختمان داده‌ای که می‌توان برای JSON در زبان برنامه نویسی پایتون پیدا کرد دیکشنری است. بنابراین نیاز است که داده‌های مورد نیاز خودمان را به شکل دیکشنری وارد پایگاه داده مربوطه بکنیم.

برای اینکار ابتدا یک دیکشنری ایجاد کرده و سپس از طریق دستور insert آن را وارد پایگاه داده بکنید:

>>> new_item = {"name": "Book", "quantity": 5}

>>> db.insert(new_item)

همانطور که مشاهده می‌کنید، دیکشنری ما حاوی یک name و یک quantity است. بعد از آن ما با استفاده از متد insert که مربوط به کلاس TinyDB است، مقدار دیکشنری را به دیتابیس ارسال کرده‌ایم. متد insert بعد از قرار دادن داده جدید، id مربوط به داده جدید را به خروجی ارسال می‌کند.

حال بعد از خروجی گرفتن و ذخیره برنامه، اگر فایل JSON را باز کنید، مقدار زیر را در آن مشاهده خواهید کرد.

{"_default": {"1": {"name": "Book", "quantity": 5}}}

مقدار _default که در این سند مشاهده می‌کنید، مربوط به نام جدول دیتابیس ماست که به صورت پیشفرض نام‌گذاری شده است. البته می‌توانید این نام را نیز تغییر دهید. عدد ۱ نیز مقدار مربوط به id است که به صورت کلید درآمده و مقدار آن نیز یک دیکشنری دیگر است که اطلاعات این id در آن ذخیره می‌شود. اگر دقیق به این فایل نگاه کنید، متوجه خواهید شد که چندین دیکشنری در داخل یکدیگر به صورت تودرتو قرار گرفته‌اند.

برای قرار دادن چندین دیکشنری به صورت همزمان می‌توانیم از متد insert_multiple استفاده کنیم. در این حالت نیاز است که داده‌های‌مان را در داخل یک لیست قرار دهیم. به مثال زیر توجه کنید:

>>> items = [

...         {"name": "Cake", "quantity": 1},

...         {"name": "Candles", "quantity": 10},

...         {"name": "Balloons", "quantity": 50}

...     ]

>>> db.insert_multiple(items)  

حال در خروجی می‌توانید شاهد idهای جدیدی باشید که وارد دیتابیس ما شده است. همچنین اگر فایل json را باز کنید متوجه خواهید شد که داده‌های جدید هر کدام با idهای منحصر به فرد ذخیره شده‌اند.  

کوئری گرفتن

برای کوئری گرفتن و دریافت اطلاعات مربوط به پایگاه داده روش‌های مختلفی وجود دارد. در TinyDB ابتدا کار شما باید کلاس Query را وارد پروژه پایتونی خود کرده و سپس یک نمونه از آن ایجاد کنید:

>>> from tinydb import Query

>>> Todo = Query()

حال برای کوئری گرفتن می‌توانید از متد search استفاده کنید. روش این کار نیز در قطعه کد زیر نشان داده شده است:

>>> db.search(Todo.name == 'Book')

[{'name': 'Book', 'quantity': 5}]

>>> db.search(Todo.name == 'Copies')

[]

>>> 

متد search لیستی از داده‌هایی که با کوئری نوشته شده داخل پرانتز تطابق دارند را برمی‌گرداند. اگر تطابقی وجود نداشته باشد در نهایت لیست خالی برگشت داده می‌شود.

روش دیگری برای کوئری گرفتن نیز استفاده از متد get() است.

>>> db.get(Todo.name == 'Book')
{'name': 'Book', 'quantity': 5}
>>> db.get(Todo.name == 'Copies') 
>>> 

متد get تنها یک مقدار را برگشت داده و خبری از لیست مقادیر تطابق یافته وجود ندارد.

متد contains() نیز برای بررسی وجود یا عدم وجود یک مقدار مورد استفاده قرار می‌گیرد که خروجی آن مقادیر True و False است.

>>> db.contains(Todo.name == 'Copies')

False

>>> db.contains(Todo.name == 'Book')  

True

>>> 

متد count() نیز برای شمردن تعداد داده‌های تطابق یافته مورد استفاده قرار می‌گیرد:

>>> db.insert({"name": "Balloons", "quantity": 500})

5

>>> db.count(Todo.name == 'Balloons')

2

>>>

برای دریافت تعداد تمام اسنادی که در داخل دیتابیس ذخیره شده است می‌توانیم از متد len() استفاده کنیم.

len(db)

برای نمایش تمام داده‌های مربوط به فایل json نیز می‌توانیم از متد all() بهره بگیریم:

db.all()

ویرایش کردن داده‌ها

برای ویرایش کردن داده‌ها می‌توانیم از متد update استفاده کنیم. شیوه کاری این متد بدین صورت است که ابتدا باید داده مورد نظر را با استفاده از یک کوئری ساده پیدا کنیم و سپس مقدار آن را در ورودی دوم تغییر دهیم. در قطعه کد زیر می‌توانید این موضوع را به صورت عملی مشاهده کنید:

db.update({'name': 'Books'}, Todo.name == 'Book')

در ورودی اول، دیکشنری name:books را مشاهده می‌کنید که ما قصد داریم داده دریافتی در ورودی دوم به آن تغییر کند. بنابراین در ورودی دوم مقداری که قصد تغییر آن را داریم وارد می‌کنیم و در ورودی اول مقدار جدید را می‌نویسیم.

اگر قصد دارید که یک مقدار مشخص از تمام اسناد را تغییر دهید می‌توانید به صورت ساده تنها به روش زیر عمل کنید:

db.update({'quantity': 10}) 

در این حالت مقدار quantity تمام اسناد به مقدار ۱۰ تغییر پیدا می‌کند.

حذف کردن داده‌ها

برای حذف اسناد از دیتابیس ما از متد remove() استفاده خواهیم کرد. در این متد تنها چیزی که مورد نیاز است، انتخاب سند مورد نظر بوده و بعد از اجرا کردن آن، داده مورد نظر حذف می‌شود. شیوه کاری این متد را می‌توانید در مثال زیر مشاهده کنید:

>>> db.remove(Todo.name == 'Cake')                              

حال اگر به فایل json نگاه کنید، می‌بینید که اثری از این داده وجود ندارد.

می‌توانید این کار را با استفاده از id مربوط به اسناد نیز انجام دهید. برای اینکار می‌توانید به صورت زیر عمل کنید:

>>> db.remove(doc_ids=[4,5]) 

برای حذف کردن تمام داده‌ها در دیتابیس می‌توانید دستور زیر را فراخوانی کنید:

>>> db.truncate()

در پایان

در این مطلب از وبسایت راکت ما به صورت کلی دیتابیس TinyDB را بررسی کردیم. این نکته را به یاد داشته باشید که به عنوان یک برنامه‌نویس، بسیار حیاتی خواهد بود که بتوانید با دیتابیس‌های مختلف به خوبی کار کرده و بتوانید به درستی آن را یاد بگیرید.

پایتون از دیتابیس‌های بسیار زیادی پشتیبانی بعمل می‌آورد، بنابراین به عنوان یک توسعه‌دهنده پایتون، می‌توانید به خوبی روی این مسئله مانور بدهید.

چه امتیازی برای این مقاله میدهید؟

خیلی بد
بد
متوسط
خوب
عالی
5 از 2 رای

4 ماه پیش
/@arastoo
ارسطو عباسی
برنامه‌نویس و توسعه‌دهنده نرم‌افزار - نویسنده و کپی‌رایتر - #پایتون - #جنگو - #لینوکس

برنامه‌نویس تمام وقت پایتون و مدیر بخش تولید محتوا وبسایت راکت - وبلاگ شخصی: https://arastoo.dev

دیدگاه و پرسش

برای ارسال دیدگاه لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

ارسطو عباسی

برنامه‌نویس و توسعه‌دهنده نرم‌افزار - نویسنده و کپی‌رایتر - #پایتون - #جنگو - #لینوکس