[파이썬] SQLAlchemy DML (Data Manipulation Language) 명령

In this blog post, we will explore how to use SQLAlchemy to perform Data Manipulation Language (DML) commands in Python. DML commands are used to modify or manipulate data in a database.

SQLAlchemy is a popular Object-Relational Mapping (ORM) library that provides a high-level, Pythonic interface for working with databases. It allows you to write database-agnostic code and provides a powerful API for executing DML commands.

1. Connecting to the Database

Before we can perform any DML commands, we need to establish a connection to the database. SQLAlchemy provides a create_engine function to create a database engine and a Session object to manage database connections.

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

# Create a database engine
engine = create_engine('database://username:password@host:port/database_name')

# Create a session
Session = sessionmaker(bind=engine)
session = Session()

Replace 'database://username:password@host:port/database_name' with the appropriate connection string for your database.

2. Inserting Data

To insert data into a table, we start by defining a class representing the table using SQLAlchemy’s declarative_base and Column classes. We can then create instances of this class and add them to the session for insertion.

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

# Define the table class
Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
  
    id = Column(Integer, primary_key=True)
    name = Column(String)
    email = Column(String)
  
# Create a new user
new_user = User(name='John Doe', email='john.doe@example.com')

# Add the new user to the session
session.add(new_user)

# Commit the transaction to persist the data
session.commit()

3. Updating Data

Updating data in a table involves querying for the desired records, modifying the appropriate columns, and committing the changes.

# Query for the user to update
user = session.query(User).filter_by(name='John Doe').first()

# Update the email address
user.email = 'johndoe@example.com'

# Commit the transaction to persist the changes
session.commit()

4. Deleting Data

To delete data from a table, we need to query for the records to delete and call the delete method on the query object.

# Query for the user to delete
user = session.query(User).filter_by(name='John Doe').first()

# Delete the user
session.delete(user)

# Commit the transaction to persist the deletion
session.commit()

5. Transaction Management

In SQLAlchemy, changes to the database are typically made within a transaction. By default, SQLAlchemy uses implicit transactions, meaning that each individual DML command is executed within its own transaction. However, you can also explicitly define transactions using the begin, commit, and rollback methods on the session object.

# Begin a transaction
session.begin()

try:
    # Perform DML commands

    # Commit the transaction
    session.commit()
except:
    # Rollback the transaction in case of an error
    session.rollback()
    raise

Conclusion

SQLAlchemy provides a powerful and intuitive API for performing DML commands in Python. Whether you need to insert, update, or delete data, SQLAlchemy makes it easy to interact with databases using a high-level, Pythonic interface. By leveraging SQLAlchemy’s features, you can write more maintainable and database-agnostic code.

In this blog post, we covered the basic usage of SQLAlchemy for DML commands. However, SQLAlchemy offers many more advanced features such as filtering, ordering, and joining data. I encourage you to explore the official SQLAlchemy documentation for more information and examples.

Happy coding!