mahsa sanaei
mahsa sanaei
خواندن ۵ دقیقه·۲ ماه پیش

معرفی Flask-SQLAlchemy


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

اینجاست که Flask-SQLAlchemy به کمک شما می‌آید. Flask-SQLAlchemy یک افزونه برای فریم‌ورک Flask است که به شما کمک می‌کند تا به راحتی با پایگاه داده‌ها کار کنید. این افزونه به شما این امکان را می‌دهد که با استفاده از رویکرد ORM (Object-Relational Mapping) به سادگی با پایگاه داده‌ها ارتباط برقرار کنید. با Flask-SQLAlchemy، شما می‌توانید به راحتی مدل‌های داده‌ای خود را تعریف کرده، داده‌ها را ذخیره و بازیابی کنید و از قدرت SQLAlchemy بهره‌مند شوید.


چرا Flask-SQLAlchemy؟

  • سادگی: Flask-SQLAlchemy به شما این امکان را می‌دهد که با استفاده از کلاس‌ها و اشیاء، به راحتی مدل‌های پایگاه داده خود را تعریف کنید.
  • قابلیت انعطاف‌پذیری: می‌توانید از انواع مختلف پایگاه داده‌ها (SQLite، PostgreSQL، MySQL و ...) استفاده کنید.
  • عملکرد بالا: با استفاده از SQLAlchemy، می‌توانید از توانایی‌های پیشرفته و بهینه‌سازی‌های آن بهره‌مند شوید.


مدل‌ها

در Flask-SQLAlchemy، شما از کلاس‌ها برای تعریف جداول پایگاه داده استفاده می‌کنید. هر کلاس معادل یک جدول در پایگاه داده است. ویژگی‌های کلاس معادل ستون‌های جدول هستند.


ایجاد پایگاه داده

قبل از استفاده از پایگاه داده، باید آن را ایجاد کنید. این کار معمولاً با استفاده از متدهایی مانند create_all() انجام می‌شود.


کوئری‌ها

شما می‌توانید از متدهای SQLAlchemy برای انجام عملیات CRUD (ایجاد، خواندن، به‌روزرسانی، حذف) بر روی داده‌ها استفاده کنید.


مراحل استفاده از Flask-SQLAlchemy

نصب Flask-SQLAlchemy

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 می‌توانید از انواع مختلف پایگاه داده‌ها استفاده کنید و هر کدام آدرس خاص خود را دارند:

  • برای SQLite
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
  • برای PostgreSQL
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://username:password@localhost/mydatabase'


  • برای MySQL
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

  1. تعریف جداول: هر کلاسی که از db.Model ارث‌بری می‌کند، به عنوان یک جدول در پایگاه داده در نظر گرفته می‌شود.
  2. مدیریت خودکار: db.Model به شما این امکان را می‌دهد که به راحتی عملیات CRUD (ایجاد، خواندن، به‌روزرسانی، حذف) را انجام دهید.
  3. پشتیبانی از ویژگی‌های ORM: با استفاده از 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 بررسی می‌کند که آیا جداولی که شما با مدل‌های خود تعریف کرده‌اید وجود دارند یا نه. اگر وجود نداشته باشند، آن‌ها را ایجاد می‌کند.


عملیات CRUD

در ادامه ی مثالی که داشتیم:

افزودن داده‌ها

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 مناسب را بر اساس نوع پایگاه داده خود تنظیم کنید و اطلاعات مربوط به کاربر و پایگاه داده را وارد کنید.

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