如何使ON DELETE CASCADE在sqlite 3.7.4中工作?

前端之家收集整理的这篇文章主要介绍了如何使ON DELETE CASCADE在sqlite 3.7.4中工作?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我多次检查了功能列表,似乎级联应该可以工作.
当我执行这个 python脚本时:
  1. #!/usr/bin/env python3
  2. import sqlite3
  3.  
  4. print(sqlite3.sqlite_version)
  5.  
  6. con = sqlite3.connect(':memory:')
  7.  
  8. a = "create table a (id integer primary key,name text)"
  9. con.execute(a)
  10.  
  11. b = "create table b (id integer primary key,r integer,foreign key(r) references a(id) on delete cascade)"
  12. con.execute(b)
  13. con.commit()
  14.  
  15. a = "insert into a (name) values (\"abc\")"
  16. con.execute(a)
  17. con.commit()
  18.  
  19. print(con.execute("select * from a").fetchall())
  20.  
  21. a = "insert into b (r) values (1)"
  22. con.execute(a)
  23. con.commit()
  24.  
  25. print(con.execute("select * from b").fetchall())
  26.  
  27. a = "delete from a where id=1"
  28. con.execute(a)
  29. con.commit()
  30.  
  31. print(con.execute("select * from b").fetchall())
  32. print(con.execute("select * from a").fetchall())

我得到这些结果:

  1. 3.7.4
  2. [(1,'abc')]
  3. [(1,1)]
  4. [(1,1)]
  5. []

这证明级联没有发生.我做错了什么或者获得与级联相同结果的解决方案是什么?

出于兼容性目的,禁用sqlite外键.您需要在每次连接到数据库后立即手动启用它们.

con.execute(“PRAGMA foreign_keys = ON”)

猜你在找的Sqlite相关文章