Release: 2.1.0b1 | Release Date: January 21, 2026

# SQLAlchemy 2.1 Documentation

SQLAlchemy 1.4 / 2.0 Tutorial

This page is part of the SQLAlchemy Unified Tutorial.

Previous: Working with Database Metadata | Next: Using INSERT Statements

# Working with Data

In Working with Transactions and the DBAPI, we learned the basics of how to interact with the Python DBAPI and its transactional state. Then, in Working with Database Metadata, we learned how to represent database tables, columns, and constraints within SQLAlchemy using the `MetaData` and related objects. In this section we will combine both concepts above to create, select and manipulate data within a relational database. Our interaction with the database is always in terms of a transaction, even if we’ve set our database driver to use autocommit behind the scenes.

The components of this section are as follows:

- Using INSERT Statements - to get some data into the database, we introduce and demonstrate the Core `Insert` construct. INSERTs from an ORM perspective are described in the next section Data Manipulation with the ORM.

- Using SELECT Statements - this section will describe in detail the `Select` construct, which is the most commonly used object in SQLAlchemy. The `Select` construct emits SELECT statements for both Core and ORM centric applications and both use cases will be described here. Additional ORM use cases are also noted in the later section Using Relationships in Queries as well as the ORM Querying Guide.

- Using UPDATE and DELETE Statements - Rounding out the INSERT and SELECTion of data, this section will describe from a Core perspective the use of the `Update` and `Delete` constructs. ORM-specific UPDATE and DELETE is similarly described in the Data Manipulation with the ORM section.

SQLAlchemy 1.4 / 2.0 Tutorial

Next Tutorial Section: Using INSERT Statements