Peewee模型为JSON

sho*_*ang 26 python json peewee

我正在使用peewee作为ORM创建API,我需要能够将peewee模型对象转换为JSON对象以发送给用户.有谁知道这样做的好方法?

col*_*fer 75

Peewee拥有model_to_dictdict_to_model佣工在playhouse.shortcuts扩展模块.

你可以使用如下:

from playhouse.shortcuts import model_to_dict, dict_to_model

user_obj = User.select().where(User.username == 'charlie').get()
json_data = json.dumps(model_to_dict(user_obj))
Run Code Online (Sandbox Code Playgroud)

另请注意,model_to_dict()可以通过相关模型进行递归,包括反向引用模型,并排除某些字段被序列化.

  • `from playhouse.shortcuts import model_to_dict,dict_to_model` (4认同)
  • @coleifer可以这样在具有多个项目(即不使用`.get()`)的SelectQuery对象上以这种方式使用model_to_dict吗?我要么看到一条错误消息,例如``SelectQuery对象没有属性'_meta''',要么表中包含UUID字段``类型为'UUID'的对象不是JSON可序列化的'' (2认同)

Pra*_*ant 5

单取时

user = User.select().where(User.id == 1).get()
model_to_dict(user)  #to Dict
Run Code Online (Sandbox Code Playgroud)

当多取

users = list(User.select().where(User.name ** 'a%').dicts()) 
Run Code Online (Sandbox Code Playgroud)


Ali*_*MAR -8

你可以这样做:

class MyModel(peewee.Model):

  def __str__(self):
    r = {}
    for k in self._data.keys():
      try:
         r[k] = str(getattr(self, k))
      except:
         r[k] = json.dumps(getattr(self, k))
    return str(r)


class User(MyModel):
    email = CharField()
    status = CharField(default="enabled")
    firstname = CharField()
    lastname = CharField()
    class Meta:
        database = db
Run Code Online (Sandbox Code Playgroud)

  • 这确实不是一个很好的方法来实现这一点。我强烈建议您查看 Peewee 的“model_to_dict()”助手,它正是为此目的而设计的。您可以在[此处](http://docs.peewee-orm.com/en/latest/peewee/playhouse.html#model_to_dict)找到文档。它还具有能够递归或排除字段的优点。 (41认同)
  • 为什么这是推荐答案?StackOverflow 失败。 (7认同)