Return single peewee record as dict

Viewed 8614

If I'm getting multiple records from a database with peewee, I can convert them to dicts like this:

users = User.select().where(User.attribute == some_value).dicts()

However, often I only want one record (or know that only one record will be returned), so I can do:

one_user = User.get(User.name == some_value)

But I can't call .dicts() on the object which is returned by that.
Is there a way to get the result of that get query in dict form?

At the moment the only thing I can think of is the unpythonic

one_user = User.select().where(User.name == some_value).dicts()[0]
3 Answers

peewee has an extension function model_to_dict, defined in playhouse.shortcuts. From the example:

>>> from playhouse.shortcuts import model_to_dict

>>> user = User.create(username='charlie')
>>> model_to_dict(user)
{'id': 1, 'username': 'charlie'}

You can use ".get()":

one_user = User.select().where(User.name == some_value).dicts().get()

Though you can also add a helper method:

class User(Model):
    @classmethod
    def get_as_dict(cls, expr):
        query = cls.select().where(expr).dicts()
        return query.get()

It's python. You can extend it.

in reference to Peewee model to JSON

i think you should implement a str method as defined in the link, and then when you do.

user = User.get(User.name == some_value)

userDict = json.dumps(str(user))

you will get the dictioanry of the user

Related