次の関数ランクは、データベースの親を正しくカウントしますが、Group.query(user_id == 1).rank(0、Group.query。 user_id == 1))非常に効率的ではないようです。この関数を書く良い方法はありますか?sqlalchemyデータベースの親を効率的に数えようとしています
class Group(db.Model):
#data
id=db.Column(db.Integer, primary_key=True)
name=db.Column(db.String(32), nullable=False)
#relationships
parent_id=db.Column(db.Integer, db.ForeignKey('group.id'))
children=db.relationship('Group', backref=db.backref('parent', remote_side=[id]))
def rank(self, count, parent):
if parent.parent:
count=count+1
parent.rank(count, parent.parent)
else:
return count
つまり、入れ子レベルを数えようとしていますか?どのDBを使用していますか?また、なぜ 'self'を使うのではなく、' parent'引数と同じインスタンスを 'rank()'に渡すのですか? –
私はデータベースにsqliteを使用しています。私は自己を使ってみましたが、それはちょうど0を返し続けました。あなたが5人の親を持っていれば私の考えは5です。データベースは自己参照型なので、新しい見た目がルートとして付けられたときに変更できるようにする必要があります。 –