[파이썬] ORM을 사용한 데이터베이스 관계 설정

Introduction

ORM, which stands for Object-Relational Mapping, is a technique used in software development to map objects in a language-specific program to relational database tables. This allows developers to interact with databases using familiar object-oriented programming paradigms.

In this blog post, we will explore how to use ORM for managing database relationships in Python.

Setting up the Database

Before we can start working with ORM, we need to set up a database. For this example, we will use SQLite. You can use any other database management system you prefer.

First, we need to create a new SQLite database file. We can do this using the following Python code:

import sqlite3

conn = sqlite3.connect('example.db')
conn.close()

This code creates a new SQLite database file named ‘example.db’.

Using SQLAlchemy ORM

SQLAlchemy is a popular Python library that provides a high-level interface for working with databases. It supports multiple database backends and offers powerful features for managing database relationships.

To get started, install SQLAlchemy using pip:

pip install sqlalchemy

Once installed, we can start defining our database models and relationships.

Defining Models and Relationships

Let’s say we’re building a simple blogging platform. We would have two main entities - User and Post. Each user can have multiple posts, so there is a one-to-many relationship between User and Post.

from sqlalchemy import Column, ForeignKey, Integer, String, create_engine
from sqlalchemy.orm import relationship

engine = create_engine('sqlite:///example.db', echo=True)
Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    posts = relationship('Post')

class Post(Base):
    __tablename__ = 'posts'
    id = Column(Integer, primary_key=True)
    title = Column(String)
    content = Column(String)
    user_id = Column(Integer, ForeignKey('users.id'))

In the code above, we define two classes User and Post, which inherit from the Base class provided by SQLAlchemy. We use class-level attributes to define the columns in our database tables. The relationship function is used to define the relationship between User and Post models.

Creating and Querying Relationships

Now that we have our models defined, we can create and query relationships using ORM.

Creating Relationships

To create a new relationship, we can simply add a new Post object to the posts attribute of a User object.

user = User(name='John Doe')
post1 = Post(title='First Post', content='Hello World!')
post2 = Post(title='Second Post', content='Goodbye World!')

user.posts.append(post1)
user.posts.append(post2)

session.add(user)
session.commit()

In the code above, we create a new User object named John Doe and two Post objects. We then append the Post objects to the posts attribute of the User. Finally, we add the User object to the session and commit the changes to the database.

Querying Relationships

To query relationships, we can simply access the posts attribute of a User object.

user = session.query(User).filter_by(name='John Doe').first()
for post in user.posts:
    print(post.title)

In the code above, we query the User object with the name ‘John Doe’ and iterate over the posts attribute to print the titles of all posts associated with that user.

Conclusion

ORM is a powerful tool for managing database relationships in Python. It allows developers to work with databases using object-oriented programming paradigms, making code more readable and maintainable.

In this blog post, we explored the basics of using SQLAlchemy ORM to define models and relationships, as well as how to create and query those relationships. We hope this introduction to ORM in Python has been informative and helpful. Happy coding!