Вставка данных в SQLAlchemy Core

Способы вставки данных в БД с помощью SQLAlchemy Core

SQLAlchemy Core — это мощный инструмент для работы с реляционными базами данных. Он предоставляет гибкое API для выполнения различных операций с данными, и в этой статье мы подробно рассмотрим процесс вставки данных.

Для начала необходимо иметь определенную таблицу, в которую вы хотите вставить данные. Допустим, у нас есть следующая таблица:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String

engine = create_engine('sqlite:///mydatabase.db')
metadata = MetaData()

users = Table('users', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String(50)),
    Column('age', Integer)
)

Вставка одной записи

Для вставки одной записи используется метод insert():

insert_stmt = users.insert().values(id=1, name='Alex', age=25)
conn = engine.connect()
result = conn.execute(insert_stmt)

Вставка нескольких записей

Если у вас есть множество записей для вставки, можно использовать тот же метод insert(), передав список словарей:

data = [
    {"id": 2, "name": "John", "age": 30},
    {"id": 3, "name": "Marie", "age": 28},
    {"id": 4, "name": "Mike", "age": 35}
]

result = conn.execute(users.insert(), data)

Возвращение значений после вставки

В некоторых базах данных (например, PostgreSQL) вы можете получить возвращаемые значения после операции вставки:

insert_stmt = users.insert().values(name="Jack", age=40).returning(users.c.id, users.c.name)
result = conn.execute(insert_stmt)

for row in result:
    print(row.id, row.name)

Пакетная вставка

При больших объемах данных пакетная вставка может значительно ускорить процесс:

big_data = [{"name": f"user_{i}", "age": i} for i in range(1000)]
conn.execute(users.insert(), big_data)

Использование автоинкремента

Если вы используете столбец с автоинкрементом (например, id в нашем примере), не обязательно указывать значение этого столбца при вставке:

insert_stmt = users.insert().values(name="Emma", age=29)
result = conn.execute(insert_stmt)

В этом случае значение id будет автоматически генерироваться базой данных.

Обработка ошибок при вставке

Важно учитывать возможные ошибки при вставке данных, особенно когда речь идет о нарушении ограничений базы данных:

try:
    result = conn.execute(users.insert().values(name="Robert", age=-10))
except Exception as e:
    print(f"Error occurred: {e}")

Заключение

SQLAlchemy Core предоставляет обширный и гибкий функционал для вставки данных в базу данных. Будь то вставка одной записи или пакетная вставка большого количества данных, SQLAlchemy обеспечивает эффективную и удобную работу с данными.

В следующих статьях мы рассмотрим другие операции с данными в SQLAlchemy Core, такие как обновление, удаление и выборка.

Содержание: