Python 炼金术+;postgres唯一约束错误

Python 炼金术+;postgres唯一约束错误,python,postgresql,sqlalchemy,Python,Postgresql,Sqlalchemy,我正在努力实现这两点: 1.-按用户的好友名称对用户进行排序 2.-按用户的朋友数对用户进行排序 这是我写的: class Monkey(db.Model): __tablename__ = 'monkey' __table_args__ = ( db.UniqueConstraint('best_friend'), ) id = db.Column(db.Integer, primary_key=True) name = db.Col

我正在努力实现这两点:

1.-按用户的好友名称对用户进行排序
2.-按用户的朋友数对用户进行排序

这是我写的:

class Monkey(db.Model):

    __tablename__ = 'monkey'
    __table_args__ = (
        db.UniqueConstraint('best_friend'),
    )

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), index=True, unique=True)
    age = db.Column(db.Integer)
    email = db.Column(db.String(128), index=True, unique=True)
    best_friend = db.Column(db.String, db.ForeignKey('monkey.name'))
    password = db.Column(db.String(128))
    is_admin = db.Column(db.Boolean)
    number_friends = db.Column(db.Integer)

    def __init__(self, name, age, email, password, best_friend=None, is_admin=False):
        self.name = name
        self.age = age
        self.email = email
        self.password = generate_password_hash(password)
        self.best_friend = best_friend
        self.is_admin = is_admin

    def number_friends(self):
        number = Friendship.query.filter_by(monkey=self.id).count()
        return number

    def get_best_friend(self):
        bf = Monkey.query.filter_by(id=self.best_friend).first()
        return bf.name

    def is_friend_of(self, friend):
        friendship = Friendship.query.filter_by(monkey=self.id, friend=friend).first()
        if (friendship == None):
            return False
        else:
            return True



class Friendship(db.Model):
    __tablename__ = 'friendship'
    __table_args__ = (
        db.PrimaryKeyConstraint('monkey', 'friend'),
    )

    monkey = db.Column(db.Integer, db.ForeignKey('monkey.id'))
    friend = db.Column(db.Integer, db.ForeignKey('monkey.id'))

    def __init__(self, monkey, friend):
        self.monkey = monkey
        self.friend = friend
因此,正如您所看到的,我可以通过使用方法
number\u friends()
从猴子那里获得朋友的数量,问题是我不知道如何使用这个数字来排序查询

我能做什么

这是我已经尝试过的

monkeys = models.Monkey.query.order_by(models.Monkey.number_friends()).paginate(page, 5, False)
到目前为止,我知道这没有帮助,因为我必须进行实例化才能使用此方法,对吗?有没有一种方法可以按照我希望的方式使用sqlalchemy使用此方法对查询排序
number\u friends()