安装anaconda打破了烧瓶安全db.session.commit()

时间:2018-04-24 04:09:51

标签: anaconda flask-sqlalchemy

我注意到当我安装anaconda时,它使用db.session.commit打破了我的所有更新。但是,它会拖延添加记录就好了。我找到了一种方法,使用合并,但我没有足够的经验来解决一些情况。

在安装anaconda之前,以下方法可行;

u = Users.query.get(1)
u.name = 'John Doe'
db.session.commit()

安装anaconda后,我必须使用以下内容;

u = Users.query.get(1)
u.name = 'John Doe'
db.session.merge(u)
db.session.commit()

现在,这是我的问题。这是我的models.db(根据我的目的调整烧瓶大型教程)

followers = db.Table('followers',
    db.Column('follower_id', db.Integer, db.ForeignKey('users.id')),
    db.Column('followed_id', db.Integer, db.ForeignKey('users.id'))
)

class Users(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(50), unique=True)
    name = db.Column(db.String(30))

    posts = db.relationship('usersPosts', backref='author', lazy='dynamic')   

    followed = db.relationship(
        'Users', secondary=followers,
        primaryjoin=(followers.c.follower_id == id),
        secondaryjoin=(followers.c.followed_id == id),
        backref=db.backref('followers', lazy='dynamic'), lazy='dynamic')

    def follow(self, user):
        if not self.is_following(user):
            self.followed.append(user)

    def unfollow(self, user):
        if self.is_following(user):
            self.followed.remove(user)

但是,我找不到适用于以下内容的语法;

usr = Users.query.filter_by(email = 'xzy@gmail.com').first()
cusr = Users.query.filter_by(email = 'xzy@yahoo.com').first()
cusr.unfollow(usr)
db.session.commit()

理想情况下,我可以找出破坏更新的内容并在某处设置配置,但我无法弄明白。一个可行的替代方案是上述代码的解决方法。

1 个答案:

答案 0 :(得分:0)

尝试在commit:

之前使用db.session.add
db.session.add(u)
db.session.commit()