[파이썬] Peewee ArrayField 및 MatrixField 활용

In this blog post, we will explore the usage of the ArrayField and MatrixField in Peewee, a lightweight Python ORM (Object Relational Mapping) library. These fields provide a convenient way to store and manipulate arrays and matrices within a database table.

ArrayField

The ArrayField in Peewee allows you to store an array of values within a single column. This is useful when you have a list of values that you want to save in the database. For example, let’s say you have a User model and want to store the user’s favorite movies as an array:

from peewee import *

database = SqliteDatabase('my_database.db')

class User(Model):
    name = CharField()
    favorite_movies = ArrayField(CharField)

    class Meta:
        database = database

To use the ArrayField, you need to import it from the peewee module. In the User model, we define the favorite_movies field as an ArrayField of CharField. This means that each element in the array will be a string.

To create a new user and store their favorite movies, you can do the following:

user = User(name='John Doe', favorite_movies=['The Shawshank Redemption', 'Pulp Fiction', 'Inception'])
user.save()

You can also query the database based on the values in the ArrayField. For example, to find all users who have ‘Inception’ as one of their favorite movies, you can use the contains operator:

users = User.select().where(User.favorite_movies.contains('Inception'))

MatrixField

The MatrixField in Peewee is an extension of the ArrayField that allows you to store a two-dimensional array or matrix. This can be useful when you need to store a grid of values, such as a game board or a matrix of numbers.

To use the MatrixField, you first need to install the peewee-extensions package, which provides additional field types for Peewee:

pip install peewee-extensions

Once installed, you can use the MatrixField in your models. Here’s an example of how you can define a Grid model with a MatrixField:

from peewee import *
from peewee_extensions import MatrixField

database = SqliteDatabase('my_database.db')

class Grid(Model):
    name = CharField()
    matrix = MatrixField(IntegerField)

    class Meta:
        database = database

In this example, we define the matrix field as a MatrixField of IntegerField. This means that each element in the matrix will be an integer.

To create a new grid and store the matrix values, you can do the following:

grid = Grid(name='My Grid', matrix=[[1, 2, 3], [4, 5, 6], [7, 8, 9]])
grid.save()

You can also query the database based on the values in the MatrixField. For example, to find all grids that have a value of 5 in the matrix, you can use the contains operator:

grids = Grid.select().where(Grid.matrix.contains(5))

Conclusion

In this blog post, we have explored how to utilize the ArrayField and MatrixField in Peewee to store and manipulate arrays and matrices in a database table. These fields provide a convenient way to work with complex data structures within your Python applications. Whether you need to store a list of values or a two-dimensional matrix, Peewee has got you covered. Happy coding!