У цій статті я хочу поговорити про управління базами даних для обробки в реальному часі та керування великими базами даних у 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