در دنیای توسعه وب، انتخاب ابزار مناسب میتواند تفاوت زیادی در کارایی و سهولت کار شما ایجاد کند. فریمورک Flask، با سادگی و قابلیتهای انعطافپذیرش، به یکی از محبوبترین گزینهها برای ایجاد وباپلیکیشنهای پایتونی تبدیل شده است. اما وقتی صحبت از مدیریت دادهها به میان میآید، آنجا که پایگاههای داده نقش کلیدی را ایفا میکنند، نیاز به ابزاری قدرتمند و کارآمد بیشتر احساس میشود.
اینجاست که Flask-SQLAlchemy به کمک شما میآید. Flask-SQLAlchemy یک افزونه برای فریمورک Flask است که به شما کمک میکند تا به راحتی با پایگاه دادهها کار کنید. این افزونه به شما این امکان را میدهد که با استفاده از رویکرد ORM (Object-Relational Mapping) به سادگی با پایگاه دادهها ارتباط برقرار کنید. با Flask-SQLAlchemy، شما میتوانید به راحتی مدلهای دادهای خود را تعریف کرده، دادهها را ذخیره و بازیابی کنید و از قدرت SQLAlchemy بهرهمند شوید.
در Flask-SQLAlchemy، شما از کلاسها برای تعریف جداول پایگاه داده استفاده میکنید. هر کلاس معادل یک جدول در پایگاه داده است. ویژگیهای کلاس معادل ستونهای جدول هستند.
قبل از استفاده از پایگاه داده، باید آن را ایجاد کنید. این کار معمولاً با استفاده از متدهایی مانند create_all()
انجام میشود.
شما میتوانید از متدهای SQLAlchemy برای انجام عملیات CRUD (ایجاد، خواندن، بهروزرسانی، حذف) بر روی دادهها استفاده کنید.
pip install Flask-SQLAlchemy
from flask import Flask from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app)
درconfig
یک دیکشنری (dictionary) در اپلیکیشن Flask است که تنظیمات مختلف برنامه را در خود نگه میدارد. شما میتوانید از این دیکشنری برای بارگذاری تنظیمات مختلف از جمله تنظیمات پایگاه داده، کلیدهای امنیتی و غیره استفاده کنید.
در کانفیگ اول کلید SQLALCHEMY_DATABASE_URI
مشخص میکند که نوع پایگاه داده و آدرس آن کجا قرار دارد. Flask-SQLAlchemy از این کلید برای شناسایی و اتصال به پایگاه داده استفاده میکند. در Flask-SQLAlchemy میتوانید از انواع مختلف پایگاه دادهها استفاده کنید و هر کدام آدرس خاص خود را دارند:
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://username:password@localhost/mydatabase'
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@localhost/mydatabase'
در کانفیگ دوم به Flask-SQLAlchemy میگوید که هشدارهای مربوط به تغییرات در شیءها را دنبال نکند. این ویژگی به طور پیشفرض فعال است و با غیرفعال کردن آن، میتوانید به بهینهسازی کارایی برنامه کمک کنید.
در SQLAlchemy(app)
یک شیء SQLAlchemy
ایجاد میکند و آن را به اپلیکیشن Flask شما متصل میکند. این شیء به شما امکاناتی را برای کار با پایگاه دادهها ارائه میدهد
مدلها برای تعریف ساختار پایگاه داده شما استفاده میشوند. به عنوان مثال، برای یک مدل کاربر میتوانید از کد زیر استفاده کنید:
class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(150), nullable=False) def __repr__(self): return f'<User {self.username}>'
اdb.Model
یک کلاس پایه برای تعریف مدلهای دادهای است. زمانی که شما یک کلاس جدید (مثل User
) تعریف میکنید و از db.Model
ارثبری میکنید، در واقع به آن کلاس ویژگیها و متدهای لازم برای تعامل با پایگاه داده را میدهید.
ویژگیهای db.Model
db.Model
ارثبری میکند، به عنوان یک جدول در پایگاه داده در نظر گرفته میشود.db.Model
به شما این امکان را میدهد که به راحتی عملیات CRUD (ایجاد، خواندن، بهروزرسانی، حذف) را انجام دهید.db.Model
، میتوانید از ویژگیهای ORM SQLAlchemy مانند ارتباطات بین جداول و کوئریهای پیچیده استفاده کنید.در ادامه دو ستون تعریف شده است. متدdb.Column
برای تعریف یک ستون جدید در جدول پایگاه داده استفاده میشود.db.Integer
نوع داده این ستون را مشخص میکند. در اینجا، id
نوع عدد صحیح (Integer) دارد.primary_key=True
تعیین میکند که این ستون کلید اصلی جدول است. کلید اصلی باید منحصر به فرد باشد و به عنوان شناسه برای هر رکورد استفاده میشود.
برای ستون دوم ازusername
برای ذخیره نام کاربری است.db.String(150)
نوع داده این ستون را مشخص میکند. در اینجا، username
میتواند یک رشته با حداکثر طول ۱۵۰ کاراکتر باشد. nullable=False
هم تعیین میکند که این ستون نمیتواند خالی باشد. به عبارت دیگر، هر کاربر باید یک نام کاربری داشته باشد.
انواع داده برای ستون ها
مقدار صحیح با db.Integer, مقدار اعشاری با db.Float, مقدار مالی با db.Numeric(length, float) ,انواع رشته ای db.String(max length) ,نوع تاریخ با db.Date, انواع منطقی db.Boolean, انواع باینری با db.Binary, انواع خاص با db.PickleType از جمله آن هاست.
متد __repr__
نمایش نمایه (representation) یک شیء از کلاس User
استفاده میشود. زمانی که شما یک شیء از کلاس User
را چاپ کنید، این متد به طور خودکار فراخوانی میشود و نمایهای از آن شیء را برمیگرداند. در اینجا، نمایه به صورت '<User نامکاربری>'
بازگشت داده میشود. این کار به شما کمک میکند تا بفهمید که شیء نمایانگر چه کاربری است.
قبل از استفاده از مدلها، باید پایگاه داده و جداول را ایجاد کنید:
with app.app_context(): db.create_all()
با متد app.app_context()
یک زمینه (context) جدید برای اپلیکیشن Flask ایجاد میکند.
زمینه (Context) در Flask، برای مدیریت وضعیت و اطلاعات مربوط به اپلیکیشن و درخواستها استفاده میشوند. با ایجاد یک زمینه، میتوانید به راحتی به منابع اپلیکیشن (مانند پایگاه داده) دسترسی پیدا کنید.
با with
به شما این امکان را میدهد که یک بلوک کد را در یک زمینه خاص اجرا کنید. وقتی بلوک with
به پایان میرسد، زمینه بهطور خودکار بسته میشود.این روش به شما کمک میکند تا بهطور مؤثری منابع را مدیریت کنید و از بروز خطاهای احتمالی جلوگیری کنید.
متد db.create_all()
جداول پایگاه داده را طبق مدلهای تعریف شده شما ایجاد میکند. اگر جدولها قبلاً وجود نداشته باشند، آنها را ایجاد میکند.به عبارت دیگر، با فراخوانی این متد، SQLAlchemy بررسی میکند که آیا جداولی که شما با مدلهای خود تعریف کردهاید وجود دارند یا نه. اگر وجود نداشته باشند، آنها را ایجاد میکند.
در ادامه ی مثالی که داشتیم:
افزودن دادهها
def add_user(username): new_user = User(username=username) db.session.add(new_user) db.session.commit()
خواندن دادهها
def get_users(): return User.query.all()
بهروزرسانی دادهها
def update_user(user_id, new_username): user = User.query.get(user_id) if user: user.username = new_username db.session.commit()
حذف دادهها
def delete_user(user_id): user = User.query.get(user_id) if user: db.session.delete(user) db.session.commit()
با db.session.commit() تغییرات ثبت میشود.
با استفاده از این تنظیمات، میتوانید به راحتی به انواع مختلف پایگاه دادهها متصل شوید. فقط کافی است که URI مناسب را بر اساس نوع پایگاه داده خود تنظیم کنید و اطلاعات مربوط به کاربر و پایگاه داده را وارد کنید.