我使用peewee作为python中的ORM(与postgresql结合使用),并尝试从具有自引用(父子关系)的表中查询给定id的每个子代
实现这一目标的最佳方法是什么?在
编辑:
我已经设置了peewee模型类:
class Customer(BaseModel):
customerid = PrimaryKeyField()
name = CharField(null=False)
parentid = ForeignKeyField(db_column='parentid',
null=True,
rel_model='self', to_field='customerid')
customer_type_customertypeid = ForeignKeyField(
db_column='customer_type_customertypeid',
null=False,
rel_model=CustomerType, to_field='customertypeid')
class Meta:
db_table = 'customer'
现在我想按id查询给定客户的每个子级,并将其转换为dict
^{pr2}$但是我想不出没有使用CTE就可以实现这一点的查询。但是,既然peewee不支持CTE,我就没办法了。 我确实看到了peewee有一个.raw(..)函数,在这个函数中可以放置真正的sql查询,但这会破坏使用ORM的优势。在
您可能希望执行递归公共表表达式。Peewee2.x还不支持这个功能,但它是在3.0版本中,因为它有很多变化,而且我还没有完成一些API。对不起的!想把它弄出来。在
不管怎样,你可以用我的模型.raw(“带…”)运行递归CTE并接收模型实例。在
我不完全确定我是否完全理解您要实现的查询,但看起来您确实在定义一个具有循环外键依赖关系的模型。文件对此有一定的说明 Circular Foreign Key Dependencies。建议创建一个中间表来处理对象之间的关系。这可能会使定义查询更加容易。在
另外,Peewee不使用
model_to_dict
方法,它允许您直接返回dict对象而不是查询对象。尝试类似于:相关问题 更多 >
编程相关推荐