Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x SQLAlchemy表达式语言和SQLite';关于删除级联_Python 3.x_Sqlite_Sqlalchemy - Fatal编程技术网

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()
可能相关: