投射到听写时保持外键关系
Maintaining foreign key relations when casting to dict
假设我有以下数据库 类:
class Person(DB.Entity):
id = PrimaryKey(int, auto=True)
name = Required(str, 100)
cars = Set('Car')
class Car(DB.Entity):
id = PrimaryKey(int, auto=True)
owner = Required(Person, cascade_delete=False)
当我对 Person 执行 select 时,我得到关联的汽车:
people = Person.select(lambda p: p.name == 'Jaewon')
不过,我想 return people
作为一个 Dict 而不是一个 Pony 对象,这样它就可以在调用方法中使用。如果我执行以下操作,我会得到 people
作为字典,但会丢失 car
键:
return people[:]
从数据库中提取值并将其作为字典 return 而不删除其关联值的正确方法是什么?
Entity.to_dict
函数有一个 related_objects
关键字参数。
您可以使用它在字典中包含对象。
如果你也想要一对多关系,你还需要 with_collections
参数。
people = Person.select(lambda p: p.name == 'Jaewon')
people = [
person.to_dict(
related_objects=True,
with_collections=True
)
for person in people
]
这不会自动递归,您必须自己遍历树才能创建完整的字典。
for person in people:
person['cars'] = [car.to_dict(**kwargs) for car in person['cars']]
假设我有以下数据库 类:
class Person(DB.Entity):
id = PrimaryKey(int, auto=True)
name = Required(str, 100)
cars = Set('Car')
class Car(DB.Entity):
id = PrimaryKey(int, auto=True)
owner = Required(Person, cascade_delete=False)
当我对 Person 执行 select 时,我得到关联的汽车:
people = Person.select(lambda p: p.name == 'Jaewon')
不过,我想 return people
作为一个 Dict 而不是一个 Pony 对象,这样它就可以在调用方法中使用。如果我执行以下操作,我会得到 people
作为字典,但会丢失 car
键:
return people[:]
从数据库中提取值并将其作为字典 return 而不删除其关联值的正确方法是什么?
Entity.to_dict
函数有一个 related_objects
关键字参数。
您可以使用它在字典中包含对象。
如果你也想要一对多关系,你还需要 with_collections
参数。
people = Person.select(lambda p: p.name == 'Jaewon')
people = [
person.to_dict(
related_objects=True,
with_collections=True
)
for person in people
]
这不会自动递归,您必须自己遍历树才能创建完整的字典。
for person in people:
person['cars'] = [car.to_dict(**kwargs) for car in person['cars']]