flask-SQLAlchemy + postgres唯一约束错误

时间:2015-06-18 20:06:23

标签: 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.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_friends()方法获得猴子的朋友数量,问题是我无法弄清楚如何使用这个数字来订购查询

我能做什么?

这是我已经尝试过的东西

monkeys = models.Monkey.query.order_by(models.Monkey.number_friends()).paginate(page, 5, False)

到目前为止,我知道这没有用,因为我必须进行实例化以使用此方法吗?有没有办法使用这种方法number_friends()以sqlalchemy的方式订购查询?

0 个答案:

没有答案