這裏的動態版本錯誤是一些示例代碼:SQLAlchemy的DELETE造成由具有兩個延遲加載和相同的關係
users_groups = Table('users_groups', Model.metadata,
Column('user_id', Integer, ForeignKey('users.id')),
Column('group_id', Integer, ForeignKey('groups.id'))
)
class User(Model):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
class Group(Model):
__tablename__ = 'groups'
id = Column(Integer, primary_key=True)
users = relationship('User', secondary=users_groups, lazy='select', backref='groups')
users_dynamic = relationship('User', secondary=users_groups, lazy='dynamic')
所以這裏所發生的是,如果你一堆的用戶添加到一個組像這樣:
g = Group()
g.users = [User(), User(), User()]
session.add(g)
session.commit()
,然後嘗試刪除該組
session.delete(g)
session.commit()
你會得到一些FO這個錯誤的rm:
DELETE statement on table 'users_groups' expected to delete 3 row(s); Only 0 were matched.
刪除關係的第二個版本(在我的情況下動態的)解決了這個問題。我甚至不知道從哪裏開始理解爲什麼會發生這種情況。在很多情況下,我一直在使用SQLAlchemy模型中的兩種不同關係的版本,以便在給定情況下使用最合適的查詢策略。這是它第一次引起意外問題。
歡迎任何建議。
如果我理解正確的話,將被動刪除標誌只會在組被刪除時阻止ORM嘗試刪除該特定集合?如果是這樣,那就好像是最無副作用的免費解決方案,謝謝。 –
另一方面,SQLAlchemy是我用過的最好的ORM,也是社區中最好的開源python庫之一。所以謝謝你,你和你的貓很棒。 –