Порівняння Django та Flask для управління великими базами даних (Postgresql) у Python для реальних застосунків.

У цій статті я хочу поговорити про управління базами даних для обробки в реальному часі та керування великими базами даних у Python.

Django

Django — один з популярних фреймворків, який можна використовувати для бекенду. В цьому фреймворку можна використовувати ORM (Object-Relational Mapping) і легко керувати базою даних. Щоб скористатися цією функцією, спочатку потрібно створити базу даних. Наприклад, я використовую PostgreSQL. Ви можете запустити це у вашій командній оболонці. Іноді потрібно додати шлях до PostgreSQL в змінну середовища системи.

psql -U postgres #перший крок  
CREATE DATABASE DB_NAME; #DB_NAME — це назва вашої бази даних

Додайте цей рядок до settings.py у вашому проекті Django

DATABASES = {  
 'default': {  
 'ENGINE': 'django.db.backends.postgresql',  
 'NAME': DB_NAME,  
 'USER': DB_USER,  
 'PASSWORD': DB_PASSWORD,  
 'HOST': DB_HOST,  
 'PORT': DB_PORT,  
 }  
}

У model.py у вашій папці з додатком ви можете використовувати цю модель для визначення вашої моделі бази даних:

from django.db import models  

class Camera(models.Model):  
 cameraname = models.CharField(max_length=255)  
 cameralocation = models.CharField(max_length=255)  
 cameralink = models.URLField(max_length=500)  

 class Meta:  
 managed = False # Дозволяє Django керувати таблицею під час міграцій  
 db_table = 'cameras'  

 def __str__(self):  
 return self.cameraname

Не забудьте про команди міграції

У views.py ви можете легко отримати доступ до вашої бази даних:

from .models import Camera  
 try:  
 camera = Camera.objects.get(id=cameraId)  
 except Camera.DoesNotExist:  
 return JsonResponse({"error": "Камера не знайдена"}, status=404)  

 # Оновлення полів динамічно на основі отриманих даних  
 if 'cameraname' in data:  
 camera.cameraname = data['cameraname']  

 if 'cameralocation' in data:  
 camera.cameralocation = data['cameralocation']  

 if 'cameralink' in data:  
 camera.cameralink = data['cameralink']

Ви також можете використовувати SQL запити в Django

Flask

Для Flask спочатку потрібно створити базу даних так само, як і в Django. Після цього ви можете створювати таблиці за допомогою SQL запиту або, як я віддаю перевагу, за допомогою функції запиту. Наприклад, я використовую цю функцію:

import psycopg2  
def create_cameras_table():  
 try:  
 conn = psycopg2.connect(dbname=DB_NAME, user=DB_USER, password=DB_PASSWORD, host=DB_HOST, port=DB_PORT)  
 cursor = conn.cursor()  

 cursor.execute("""  
 CREATE TABLE IF NOT EXISTS cameras (  
 id SERIAL PRIMARY KEY,  
 cameraname TEXT NOT NULL,  
 cameralocation TEXT NOT NULL,  
 cameralink TEXT NOT NULL  
 )  
 """)  
 conn.commit()  
 print("Таблиця 'cameras' успішно створена.")  

 except Exception as e:  
 print(f"Помилка: {e}")  
 finally:  
 if conn:  
 cursor.close()  
 conn.close()

У Flask, якщо ви хочете отримати доступ до вашого набору даних, ви повинні використовувати SQL запит ось так:

def get_cameras():  
 try:  
 conn = psycopg2.connect(dbname=DB_NAME, user=DB_USER, password=DB_PASSWORD, host=DB_HOST, port=DB_PORT)  
 cursor = conn.cursor()  

 cursor.execute("SELECT cameraname, cameralocation, cameralink ,id FROM cameras")  
 cameras = cursor.fetchall()  


 cameras_list = [  
 {"cameraname": row[0], "cameralocation": row[1], "cameralink": row[2],"cameraid":row[3]}   
 ]  
 print(cameras_list)  

 except Exception as e:  
 return jsonify({"error": str(e)}), 500  
 finally:  
 if conn:  
 cursor.close()  
 conn.close()

Висновок

Основною перевагою Django є його здатність прискорювати розробку завдяки вбудованому ORM, що спрощує управління базою даних. Однак прямі SQL запити зазвичай забезпечують кращу продуктивність, ніж взаємодія з ORM. Якщо швидкість роботи з базою даних є критично важливою, уникнення ORM може допомогти мінімізувати час обробки. У моїх тестах порівняння Django з ORM, Django з прямими SQL запитами та Flask з прямими SQL запитами, ORM виявився помітно повільнішим за прямі SQL запити. Тому, працюючи з Flask, використання прямих SQL запитів є простим і ефективним.
Тим самим, якщо ви обираєте Django і вам необхідні операції з базою даних високої продуктивності, рекомендується використовувати прямі SQL запити. В кінцевому підсумку, як Django, так і Flask демонструють подібні швидкості обробки при використанні прямих SQL запитів.

Перекладено з: Comparison of Django & Flask for Big Database (Postgresql) Management in Python for real time application

Leave a Reply

Your email address will not be published. Required fields are marked *