【发布时间】:2020-01-03 16:00:48
【问题描述】:
我有两个关联表users和roles,它们之间的关系是多对多的,所以还存在另一个关联表userroles。
userroles 表使用外键跟踪关联的 users 和 roles 行。对于外键,ondelete 参数设置为"CASCADE",以便在删除任何关联元素时删除关联行。
这是我的设置:
import sqlalchemy as sa
engine = sa.create_engine("sqlite:///:memory:", echo=True)
metadata = sa.MetaData()
userroles = sa.Table(
"userroles",
metadata,
sa.Column("user_id", sa.Integer, sa.ForeignKey("users.id", ondelete="CASCADE")),
sa.Column("role_id", sa.Integer, sa.ForeignKey("roles.id", ondelete="CASCADE")),
)
users = sa.Table(
"users",
metadata,
sa.Column("id", sa.Integer, primary_key=True),
sa.Column("name", sa.String),
)
roles = sa.Table(
"roles",
metadata,
sa.Column("id", sa.Integer, primary_key=True),
sa.Column("name", sa.String),
)
metadata.create_all(engine)
conn = engine.connect()
conn.execute(users.insert().values(name="Joe"))
conn.execute(roles.insert().values(name="Admin"))
conn.execute(roles.insert().values(name="User"))
conn.execute(userroles.insert().values(user_id=1, role_id=1))
但是,当我删除唯一 ID 为 1 的 Admin 角色时,关联的行不会从 userroles 表中删除。为什么?
我在这里错过了什么?
【问题讨论】:
标签: python-3.x sqlite sqlalchemy