← Назад к вопросам

Как добавить запись в БД?

1.0 Junior🔥 221 комментариев
#Python Core#Базы данных (SQL)

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Способы добавления записи в БД

Добавление записей в БД зависит от выбранного инструмента и архитектуры приложения. Рассмотрю основные подходы:

SQL-запросы (Raw SQL)

Для прямого выполнения SQL-команд используется драйвер БД:

import psycopg2

connection = psycopg2.connect("dbname=mydb user=postgres password=secret")
cursor = connection.cursor()

query = "INSERT INTO users (name, email) VALUES (%s, %s)"
cursor.execute(query, ("John", "john@example.com"))
connection.commit()
cursor.close()
connection.close()

ORM (SQLAlchemy)

Объектно-реляционное отображение предоставляет удобный интерфейс:

from sqlalchemy import create_engine
from sqlalchemy.orm import Session
from models import User

engine = create_engine("postgresql://user:password@localhost/mydb")

with Session(engine) as session:
    new_user = User(name="John", email="john@example.com")
    session.add(new_user)
    session.commit()

Django ORM

В Django используется встроенный ORM:

from myapp.models import User

User.objects.create(name="John", email="john@example.com")
# или
user = User(name="John", email="john@example.com")
user.save()

Асинхронная вставка (asyncpg)

Для асинхронной работы с PostgreSQL:

import asyncio
import asyncpg

async def insert_user():
    conn = await asyncpg.connect("postgresql://user:password@localhost/mydb")
    await conn.execute(
        "INSERT INTO users (name, email) VALUES ($1, $2)",
        "John", "john@example.com"
    )
    await conn.close()

asyncio.run(insert_user())

Важные моменты

Обработка ошибок:

  • Всегда обрабатывай исключения при работе с БД
  • Гарантируй закрытие соединений (используй контекстные менеджеры)
  • Откати транзакцию при ошибках

Валидация данных:

  • Валидируй входные данные перед вставкой
  • Используй типизацию и схемы валидации (Pydantic)

Безопасность:

  • Используй параметризованные запросы (защита от SQL-инъекций)
  • Никогда не подставляй значения напрямую в SQL-строку

Производительность:

  • Для массовой вставки используй batch операции
  • При необходимости используй асинхронный код

Транзакции:

  • Убедись, что данные полностью корректны перед commit
  • Используй rollback при ошибках

Выбор инструмента зависит от требований проекта, масштаба и команды.