这里的动态版本错误是一些示例代码: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库之一。所以谢谢你,你和你的猫很棒。 –