저는 Flask-SQLAlchemy를 사용하고 있습니다. 나는 연관 테이블을 통해 관계를 공유하는 두 개의 클래스를가집니다. 테이블 중 하나에서 행을 삭제하려고 할 때.플라스크 SQLAlchemy 다 대다 StaleDataError
tags = db.Table('tags',
db.Column('tag_id', db.Integer, db.ForeignKey('tag.id')),
db.Column('post_id', db.Integer, db.ForeignKey('posts.id'))
)
class Post(db.Model):
__tablename__ = 'posts'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(255))
tags = db.relationship('Tag', secondary=tags,
backref=db.backref('posts', lazy='dynamic'))
def __init__(self, **kwargs):
super(Post, self).__init__(**kwargs)
def __repr__(self):
return '<title %r>' % self.title
class Tag(db.Model):
__tablename__ = 'tag'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(120), unique=True)
여기에 내가 삭제를 실행 코드는 다음과 같습니다 : 여기
sqlalchemy.orm.exc.StaleDataError
StaleDataError: DELETE statement on table 'tags' expected to delete 1 row(s); Only 2 were matched.
내 모델입니다 : 나는 다음과 같은 오류가 나는 스트라이프 다운 버전을 시도
def remove_tag(tag_id):
tag = Tag.query.get(tag_id)
for post in tag.posts:
p = Post.query.get(post.id)
p.tags.remove(tag)
db.session.delete(tag)
db.session.commit()
독립 실행 형 테스트, db 및 환경에서이 코드 외부,이 응용 프로그램 외부. 그리고 예상대로 태그와 관련 테이블 행을 제거합니다.
내가 알고 싶은 것이 가능하다면 :
나는 StaleDataError의 상황에서 거지 어떻게- ?
- .all()에 대한 내 쿼리에서 여러 용도가 표시되지 않는데 왜 둘 이상의 행과 일치합니까?
- 어떻게 이런 일이 발생하지 않도록 할 수 있습니까?
미리 도움을 청하십시오.
보다도, 에드워드
예제에서 들여 쓰기를 수정했지만 오류가있는 것 같지만 'remove_tag()'을 그대로 둡니다. 확인해 주시겠습니까? –