آموزش sqlite3
به نام خدا
کار با دیتابیس یکی از مهارت هایی است که در توسعه طیف بسیار زیادی از نرمافزار موثر است. یکی از بهترین و ساده ترین ابزار های این کار در پایتون، ماژول sqlite3 است.
دیتابیس چیست؟
برای ذخیره اطلاعات، دیتابیس یکی از بهترین روش ها است. ما در دیتابیس ها (db) اطلاعات را در جدول هایی ذخیره می کنیم تا دسترسی به آنها آسان شود.

شروع
ماژول splite3 یکی از ماژول های built_in پایتون است، پس نیازی به نصب ندارد. مستقیم می رویم سراغ فراخوانی آن:
import sqlite3مسیر فایل دیتابیس خود را در قالب رشته با فرمت db ذخیره می کنیم. البته این کار ضروری نیست و می توانیم این آدرس را مستقیما به تابعی که در ادامه خواهیم خواند پاس بدهیم ولی برای زیبایی کد ها لازم است:
dbPath='/home/ubuntu/Dropbox/data_base.db'کلمه data_base ضروری نیست و هر نامی می توانید انتخاب کنید.
۱
اولین و مهمترین تابع خود را با نام connect می نویسیم:
def connect():
conn = sqlite3.connect(dbPath)
cursor = conn.cursor()
cursor.execute('CREATE TABLE IF NOT EXISTS person (userId INTEGER PRIMARY KEY, name text, email text, age INTEGER, describe text)')
conn.commit()
conn.close()خط ۱: نوشتن تابع را شروع کردیم.
خط ۲: به فایل db خود وصل شدیم. اتصال ما یک شیء با نام conn از connect است.
خط ۳: تابع cursor موجود در conn را در متغیری به همین نام (cursor) ذخیره کردیم.
خط ۴: با تابع execute موجود در conn، کدی با زبان SQL را اجرا کردیم. ترجمه این کد:
جدول بساز اگر موجود نیست {با نام} person {با پارامتر های} usetId عددی صحیح است که یکتا باشد، name که متن باشد، email که متن باشد، سن که عددی صحیح است، توضیح که متن است
سعی کردم گنگ نباشد. البته یادگیری کد های SQL جزو بحث ما نیست و کلا مقوله ای جداست. به همین دلیل زیاد به آنها نمی پردازم.
خط ۵: تغییرات را در دیتابیس اعمال کردیم.
خط ۶: اتصال را قطع کردیم. *** حتما این کار را بکنید. عدم انجام این کار ممکن است باعث خطاهایی شود. ***
۲
در مرحله بعد باید تابعی بنویسیم که به وسیله آن اطلاعاتی را وارد دیتابیس کنیم:
def insert(name, email, age, describe):
conn = sqlite3.connect(dbPath)
cursor = conn.cursor()
cursor.execute('INSERT INTO person VALUES (NULL, ?,?,?,?)', (name, email, age, describe))
conn.commit()
conn.close()خط ۱ و ۲ و ۳: تکراری
خط ۴: با تابع execute، دستور SQL را اجرا کردیم. ترجمه دستور:
وارد کن به person مقدار های هیچ، name، email، age، describe
تنها نکته مهمی که درباره خط بالا به ذهنم می رسد، عبارت NULL است. چرا از آن استفاده می کنیم؟ در تابع connect که قبلا نوشتیم، جلوی useID INTEGER نوشتیم PRIMARY KEY. این یعنی خود کامپیوتر باید این مقدار بسازد و ما آن را وارد نمی کنیم. پس دلیل اینکه آن را NULL مقدار دادیم، این بود.
خط ۵ و ۶: تکراری
۳
برای جست و جو کردن بین افراد داخل person تابعی به نام search می نویسیم:
def search(name='', email='', age='', describe=''):
conn = sqlite3.connect(dbPath)
cursor = conn.cursor()
cursor.execute('SELECT * FROM person WHERE name=? OR email=? OR age=? OR describe=?',
(name, email, age, describe))
rows = cursor.fetchall()
conn.commit()
conn.close()
return rowsنحوه استفاده از تابع بالا:
print(search(age=17))توضیحات تابع:
خط ۱ و ۲: تکراری
خط ۳: معنی کد:
انتخاب کن همه چیز را در person جایی که name برابر name باشد یا ...
این کد همه ستون های جدول ما را فراخوانی می کند و از بین آنها، ردیف هایی که یا name آنها برابر name ورودی باشد یا به طور کلی x آنها برابر x ورودی است را نگه می دارد و
خط ۴: خروجی تابع fetchall را در rows ذخیره کردیم. این تابع، همه سطر های باقیمانده را به ما می دهد.
نکته: پیشنهاد می کنم خروجی type() با ورودی rows را ببینید.
خط ۵ و ۶: تکراری
خط ۷: rows را برگرداندیم.
۴
نوبت به نوشتن تابع delete می رسد:
def delete(id):
conn = sqlite3.connect(dbPath)
cursor = conn.cursor()
cursor.execute('DELETE FROM person WHERE userId=?',
(userId,))
conn.commit()
conn.close()این تابع نیاز به توضیح خاصی ندارد.
۵
اگر بخواهیم کل سطر های فایل db را ببینیم چه؟ این کار بسیار ساده است. فقط باید شرط های موجود در تابع search را حذف کنیم. پس کد SQL را به این شکل تغییر می دهیم:
SELECT * FROM person۶
شاید بخواهیم مقادیر موجود در یک سطر را تغییر دهیم؛ برای این کار تابع update را می نویسیم:
def update(userId, name, email, age, describe):
conn = sqlite3.connect(dbPath)
cursor = conn.cursor()
cursor.execute('UPDATE person SET title=?, author=?, year=?, isbn=? WHERE id=?', (name, email, age, describe, userId))
conn.commit()
conn.close()توضیح این تابع فقط مربوط به کد SQL آن می شود. ترجمه:
بهروز کن person را ست کن name=name، ... در جایی که {اگر} userId برابر userId باشد
این کد، در سطری که userId آن برابر userId ورودی باشد، name و دیگر اطلاعات را با اطلاعات ورودی جایگزین می کند.
اصلیترین بخش های کتابخانه sqlite3 را یاد گرفتیم. ممکن است در آینده مطالب بیشتری در اینباره منتشر کنیم. اگر نظری دارید، حتما آن را با ما در میان بگذارید.


مشاهده نظرات بیشتر...