这是一些示例代码:
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()
你会得到某种形式的这个错误:
DELETE statement on table 'users_groups' expected to delete 3 row(s); Only 0 were matched.
删除关系的第二个版本(在我的例子中是动态的)解决了这个问题。我什至不知道从哪里开始理解为什么会发生这种情况。在我的 SQLAlchemy 模型中,在许多情况下,我一直在使用各种关系的 2 个版本,以便在给定情况下轻松使用最合适的查询策略。这是它第一次引起意想不到的问题。
欢迎任何建议。