پای‌دانتیکپای‌دانتیکپای‌دانتیک
  • صفحه اصلی
  • اخبار
  • آموزش
  • تجربه
  • نقشه راه
  • فریمورک
    • django
    • fastapi
خواندن: آموزش ساخت اپلیکیشن با sqlalchemy + postgres + docker
اشتراک گذاری
ورود
0

هیچ محصولی در سبد خرید نیست.

اعلان نمایش بیشتر
تغییردهنده سایز فونتAa
پای‌دانتیکپای‌دانتیک
0
تغییردهنده سایز فونتAa
Search
  • صفحه اصلی
  • آموزش
  • اخبار
  • تجربه
  • نقشه راه
  • فریمورک
    • django
    • fastapi
Have an existing account? ورود
ما را دنبال کنید
© 2022 Foxiz News Network. Ruby Design Company. All Rights Reserved.
پای‌دانتیک > آموزش > آموزش ساخت اپلیکیشن با sqlalchemy + postgres + docker
آموزش

آموزش ساخت اپلیکیشن با sqlalchemy + postgres + docker

afshin azizzadeh
آخرین به روز رسانی: آبان 18, 1402 8:18 ق.ظ
afshin azizzadeh
اشتراک گذاری
6 دقیقه زمان مطالعه
آموزش ساخت اپلیکیشن با sqlalchemy + postgres + docker
آموزش ساخت اپلیکیشن با sqlalchemy + postgres + docker
اشتراک گذاری

Contents
نصب وابستگی‌هاSetupساختار پوشهPostgres با Dockerارتباطایجاد/حذف جداولجلسهایجاد جدولدرج دادهداده ها را انتخاب کنید

SQLAlchemy یک کتابخانه طراحی شده برای کار با پایگاه های داده SQL است که از گویش های مختلف مانند MySQL، PostgreSQL، SQLite و غیره پشتیبانی می کند. در مورد ما، از PostgreSQL – یک پایگاه داده SQL به خوبی تثبیت شده استفاده خواهیم کرد.

SQLAlchemy دو نسخه ارائه می دهد: Core که می توانید به عنوان سازنده پرس و جو فکر کنید و ORM که ترجیح داده می شود.

ما گزینه های زیادی برای استفاده از PostgreSQL داریم – در ابر یا در ماشین محلی شما. ما از Docker استفاده خواهیم کرد زیرا نیاز به نصب دستی را از بین می برد و تنها با چند خط کد امکان تغییرات آسان در پیکربندی را فراهم می کند.

نصب وابستگی‌ها

وابستگی ها را نصب کنید

ما از و آخرین نسخه SQLAlchemy (در حال حاضر 2.0.20) استفاده خواهیم کرد. python-dotenv به ما کمک می کند تا متغیرها را از متغیرهای محیط بارگیری کنیم. می توانید چندین محیط ایجاد کنید و محیط مورد نیاز خود را بارگذاری کنید.

pip install "psycopg[binary]"
pip install SQLAlchemy
pip install python-dotenv

Setup

ساختار پوشه

.env file

یک فایل env ایجاد کنید. در صورت تمایل می توانید مدارک خود را انتخاب کنید.

DB_USERNAME=admin
DB_PASSWORD=123456
DB_NAME=medium_db

Postgres با Docker

این فایل docker-compose.yml ما است.

version: '3.8'

services:
  postgres:
    restart: 'always'
    image: postgres:15.4-alpine
    networks:
      - db
    volumes:
      - ./todo.sql:/docker-entrypoint-initdb.d/schema.sql
    env_file:
      - .env
    environment:
      - POSTGRES_DB=${DB_NAME}
      - POSTGRES_USER=${DB_USERNAME}
      - POSTGRES_PASSWORD=${DB_PASSWORD}
    healthcheck:
      test: [ "CMD-SHELL", "pg_isready -U ${POSTGRES_USER}" ]
      timeout: 2s
      interval: 5s
      retries: 10
    ports:
      - 5432:5432

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080
    networks:
      - db

networks:
  db:

با استفاده از این دستور می توانید فایل را اجرا کنید

docker-compose -f docker-compose.yml up -d

می توانید به Adminer در http://localhost:8080 دسترسی داشته باشید. اگر از Docker استفاده می کنید، از این رمز عبور استفاده کنید: 123456 (یا شما).

ارتباط

ما اعتبارنامه ها را از فایل .env بازیابی می کنیم و URL را برای ایجاد ارتباط با پایگاه داده خود ارسال می کنیم. فعال کردن پرچم echo در طول توسعه مفید است زیرا SQLAlchemy کوئری های SQL را که ما اجرا می کنیم ثبت می کند. تابع create_engine یک مخزن اتصال با کمک DBAPI ایجاد می کند.

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, declarative_base
from dotenv import dotenv_values

Base = declarative_base()


def db_connect():
    config = dotenv_values("./.env")
    username = config.get("DB_USERNAME")
    password = config.get("DB_PASSWORD")
    dbname = config.get("DB_NAME")

    engine = create_engine(f"postgresql+psycopg://{username}:{password}@localhost:5432/{dbname}", echo=True)
    connection = engine.connect()

    return engine, connection


db_connect()

ایجاد/حذف جداول

اگر می خواهید جداول را بر اساس طرح های تعریف شده ایجاد کنید، می توانید از تابع create_all استفاده کنید. از سوی دیگر، drop_all در طول توسعه کاربردی است، به خصوص زمانی که مفاهیم جدیدی را یاد می گیرید یا تغییراتی ایجاد می کنید که ممکن است منجر به خروج های پیچیده شود.

با این حال، مهم است که توجه داشته باشید که drop_all برای محیط های تولید مناسب نیست، زیرا منجر به حذف داده های تولید می شود، چیزی که ما می خواهیم از آن اجتناب کنیم.

def create_tables_orm(engine):
    Base.metadata.drop_all(engine, checkfirst=True)
    Base.metadata.create_all(engine, checkfirst=True)

جلسه

یک جلسه برای تداوم یا واکشی داده ها از پایگاه داده استفاده می شود.

def create_session(engine):
    Session = sessionmaker(bind=engine)
    session = Session()

    return session

ایجاد جدول

ابتدا باید طرح پایگاه داده‌ی خود را تعریف کنیم. باید مدل‌های پایگاه داده‌ی خود را با وضعیت فعلی در پایگاه داده همگام کنیم. اگر این کار را انجام دهیم،می توانیم با خیال راحت با اشیاء موجود در کدمان کار کنیم.

from sqlalchemy import Column, Text, Integer


class Products(Base):
    __tablename__ = "products"

    product_id = Column(Integer, primary_key=True)
    low_fats = Column(Text, nullable=False)
    recyclable = Column(Text, nullable=False)


create_tables_orm(engine

پس از اجرای کد، جدول ما ایجاد خواهد شد.

درج داده

باید طرح پایگاه داده‌ی خود را تعریف کنیم. حفظ هماهنگی مدل‌های پایگاه داده‌ی ما با وضعیت فعلی پایگاه داده بسیار مهم است.

با انجام این کار، می‌توانیم به امانت با اشیاء در کد خود کار کنیم – ایجاد یک شی جدید، نقشه‌برداری اشیاء و غیره.

فراموش نکنید که session.commit() را اضافه کنید. بدون این کار، کد بدون مشکل اجرا می‌شود اما داده‌ها در پایگاه داده ذخیره نخواهند شد.

new_products = [
    Products(low_fats="Y", recyclable="N"),
    Products(low_fats="Y", recyclable="Y"),
    Products(low_fats="N", recyclable="Y"),
    Products(low_fats="Y", recyclable="Y"),
    Products(low_fats="N", recyclable="N"),
]


session.add_all(new_products)
session.commit()

این اقدام باید به درج داده های جدید در پایگاه داده منجر شود.

داده ها را انتخاب کنید

ما می‌خواهیم این پرس‌وجو را در پایگاه داده‌ی خود اجرا کنیم.

SELECT p.product_id
FROM products p
WHERE p.low_fats = 'Y' AND p.recyclable = 'Y';

همانطور که مشاهده می‌کنید، این کار بسیار ساده است. شما می‌توانید تشابه‌های زیادی با پرس و جوهای SQL اصلی پیدا کنید.

from sqlalchemy import Column, Text, Integer, and_   # new


result = session.query(Products.product_id).where(and_(Products.low_fats == "Y", Products.recyclable == "Y"))
for row in result:
    print(row.product_id)

# 2
# 4

session.close()
connection.close(

کد: مخزن Github

از اینکه برای مقاله من وقت گذاشتید و خواندید متشکرم از علاقه شما به موضوع تشکر می کنم و امیدوارم آموزنده بوده باشد. اگر نظر یا پیشنهادی در مورد مقاله دارید،لطفاً با ما به اشتراک بزارید

منبع مطلب

Sign Up For Daily Newsletter

Be keep up! Get the latest breaking news delivered straight to your inbox.
By signing up, you agree to our Terms of Use and acknowledge the data practices in our Privacy Policy. You may unsubscribe at any time.
این مقاله را به اشتراک بگذارید
Facebook Twitter Copy Link Print
اشتراک گذاری
مقاله قبلی Torchquad کتابخانه Python برای ادغام عددی با شتاب GPU Torchquad: کتابخانه Python برای ادغام عددی با شتاب GPU
مقاله بعدی کد تقلب جنگو(Django) کد تقلب جنگو(Django)
پیام بگذارید پیام بگذارید

دیدگاهتان را بنویسید لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

همه دسته بندی ها

  • django
  • fastapi
  • آموزش
  • اخبار
  • تجربه
  • دسته‌بندی نشده
  • نقشه راه
پای‌دانتیکپای‌دانتیک
ما را دنبال کنید
قالب فاکسیز فارسی شده توسط تیم راستچین 2023
Welcome Back!

Sign in to your account