我注意到当我安装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()
理想情况下,我可以找出破坏更新的内容并在某处设置配置,但我无法弄明白。一个可行的替代方案是上述代码的解决方法。
答案 0 :(得分:0)
尝试在commit:
之前使用db.session.adddb.session.add(u)
db.session.commit()