[파이썬] Peewee Model 클래스 확장

Peewee is a lightweight yet powerful Object Relational Mapper (ORM) for Python. It provides a simple and intuitive way to interact with databases, allowing developers to focus on the application logic rather than dealing with complex SQL queries.

In this blog post, we will explore how to extend the Peewee Model class to add custom functionality and behavior to our database models.

Subclassing the Peewee Model class

To extend the Peewee Model class, we can simply create a subclass and add our custom methods and properties. This allows us to encapsulate and reuse common database operations and logic across multiple models.

Here’s an example of how to subclass the peewee.Model class and add a custom method:

from peewee import *

class CustomModel(Model):
    # custom fields and methods
    
    def custom_method(self):
        # custom logic
        pass

In the above example, we create a CustomModel class that subclasses Model. We can then add any custom fields, methods, or properties to this class.

Overriding Default Behavior

We can also override the default behavior of the Peewee Model methods by extending them in our custom subclass. This allows us to modify or enhance the way these methods work for our specific use cases.

For example, let’s say we want to override the save method to automatically set the created_at and updated_at fields of our models:

from peewee import *
from datetime import datetime

class TimestampedModel(Model):
    created_at = DateTimeField(default=datetime.now)
    updated_at = DateTimeField(default=datetime.now)

    def save(self, *args, **kwargs):
        self.updated_at = datetime.now()
        super().save(*args, **kwargs)

In the above example, we create a TimestampedModel class that subclasses Model. We define the created_at and updated_at fields with default values set to the current datetime. We then override the save method to update the updated_at field before saving the model.

Custom Query Methods

Another powerful feature of Peewee is the ability to define custom query methods on our subclassed models. These methods can encapsulate complex query logic and provide a convenient way to retrieve or filter data.

For example, let’s say we have a User model and we want to add a custom query method to retrieve all active users:

from peewee import *

class User(Model):
    name = CharField()
    is_active = BooleanField(default=True)

    @classmethod
    def get_active_users(cls):
        return cls.select().where(cls.is_active == True)

In the above example, we define a User model with a name field and an is_active field (defaulting to True). We then define a get_active_users class method that performs a query to retrieve all active users.

Conclusion

Extending the Peewee Model class allows us to add custom functionality, override default behavior, and define custom query methods. This provides us with a flexible and powerful way to work with databases in Python.

By encapsulating common database operations and logic within our custom models, we can write cleaner and more maintainable code. Peewee’s simplicity and flexibility make it a great choice for ORM in Python projects.

Remember to import the necessary modules (peewee in this case) before using the Peewee Model class and its functionalities.

Happy coding!