SQLAlchemy is a popular Object-Relational Mapping (ORM) library for Python that provides a high-level, Pythonic interface for interacting with databases. It allows you to define database tables as Python classes and perform CRUD operations using Python code.
Installing SQLAlchemy
Before we dive into defining tables and mapping classes, let’s make sure SQLAlchemy is installed. You can install it using pip:
pip install SQLAlchemy
Defining Tables
To define a table in SQLAlchemy, we use the Table class and specify the table name and its columns. Each column is defined with a name, data type, and optional constraints.
Here’s an example of defining a simple users table with id, name, and email columns:
from sqlalchemy import Table, Column, Integer, String, MetaData
metadata = MetaData()
users = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('email', String, unique=True)
)
In the above code snippet, we import the necessary classes from SQLAlchemy and create a MetaData object. We then define the users table with three columns: id, name, and email. The id column is the primary key, and the email column is marked as unique.
Mapping Classes
After defining the table, we can map it to a Python class using the mapper function provided by SQLAlchemy. This allows us to interact with the table using instances of the mapped class.
Here’s an example of mapping the users table to a Python class:
from sqlalchemy import mapper
class User:
def __init__(self, name, email):
self.name = name
self.email = email
mapper(User, users)
In the above code snippet, we define a User class with name and email attributes. We then use the mapper function to map the User class to the users table.
CRUD Operations
Once the table is defined and mapped to a Python class, we can perform CRUD operations using instances of the mapped class.
Creating a Record
To create a new record in the table, we first need to create an instance of the mapped class and then add it to a session and commit the changes.
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
engine = create_engine('sqlite:///mydb.sqlite')
Session = sessionmaker(bind=engine)
session = Session()
user = User('John Doe', 'johndoe@example.com')
session.add(user)
session.commit()
In the above code snippet, we create a SQLite database engine and a session. We then create a new User instance, add it to the session, and commit the changes.
Reading Records
To retrieve records from the table, we can use the session to query the mapped class:
users = session.query(User).all()
for user in users:
print(user.name, user.email)
In the above code snippet, we retrieve all User instances from the users table and iterate over them to print their names and emails.
Updating a Record
To update a record, we retrieve it from the table, modify its attributes, and commit the changes:
user = session.query(User).filter_by(name='John Doe').first()
user.email = 'john@example.com'
session.commit()
In the above code snippet, we retrieve the User instance with the name ‘John Doe’, update its email, and commit the changes.
Deleting a Record
To delete a record, we first retrieve it from the table and then delete it from the session:
user = session.query(User).filter_by(name='John Doe').first()
session.delete(user)
session.commit()
In the above code snippet, we retrieve the User instance with the name ‘John Doe’, delete it from the session, and commit the changes.
Conclusion
SQLAlchemy provides a powerful and flexible way to define database tables and map them to Python classes. With SQLAlchemy, you can easily perform CRUD operations using Python code, abstracting away the complexities of SQL queries.