Python 3.x SQLAlchemy表达式语言和SQLite';关于删除级联
我有两个相关的表,即Python 3.x SQLAlchemy表达式语言和SQLite';关于删除级联,python-3.x,sqlite,sqlalchemy,Python 3.x,Sqlite,Sqlalchemy,我有两个相关的表,即users和roles,它们之间的关系是多对多的,因此还存在另一个关联表userroles userroles表使用外键跟踪关联的users和roles行。对于外键,ondelete参数设置为“CASCADE”,以在删除任何关联元素时清除关联行 这是我的设置: 将sqlalchemy作为sa导入 engine=sa.create_引擎(“sqlite://:内存:”,echo=True) metadata=sa.metadata() userroles=sa.Table( “
users
和roles
,它们之间的关系是多对多的,因此还存在另一个关联表userroles
userroles
表使用外键跟踪关联的users
和roles
行。对于外键,ondelete
参数设置为“CASCADE”
,以在删除任何关联元素时清除关联行
这是我的设置:
将sqlalchemy作为sa导入
engine=sa.create_引擎(“sqlite://:内存:”,echo=True)
metadata=sa.metadata()
userroles=sa.Table(
“用户角色”,
元数据,
sa.Column(“user\u id”,sa.Integer,sa.ForeignKey(“users.id”,ondelete=“CASCADE”),
sa.Column(“role\u id”,sa.Integer,sa.ForeignKey(“roles.id”,ondelete=“CASCADE”),
)
users=sa.Table(
“用户”,
元数据,
sa.列(“id”,sa.整数,主键=True),
sa.列(“名称”,sa.字符串),
)
角色=sa.Table(
“角色”,
元数据,
sa.列(“id”,sa.整数,主键=True),
sa.列(“名称”,sa.字符串),
)
元数据。创建所有(引擎)
conn=引擎连接()
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\u id=1,role\u id=1))
但是,当我删除唯一id为1
的Admin
角色时,关联行不会从userroles
表中删除。为什么?
我在这里遗漏了什么?好的,看来您需要为sqlite强制使用外键。基于此,我们应该做: 来自sqlalchemy导入事件的
从sqlalchemy.engine导入引擎
从sqlite3将连接导入为SQLite3Connection
@事件。侦听(引擎,“连接”)
定义集sqlite pragma(dbapi连接、连接记录):
如果isinstance(dbapi_连接、SQLITE3连接):
cursor=dbapi_connection.cursor()
cursor.execute(“PRAGMA foreign_keys=ON;”)
cursor.close()
可能相关: