首先,我们创建两个模型(User/Arctire),代码如下(相信大家都比较熟悉sqlalchemy了,故省略了导入代码及创建模型部分代码)
#父表
class User(Base):
__tablename__ = "user"
id = Column(Integer , primary_key=True , autoincrement=True)
name = Column(String(50) , nullable=False)
#从表
class Arctire(Base):
__tablename__ = "arctire"
id = Column(Integer , primary_key=True , autoincrement=True)
title = Column(String(50) , nullable=False)
uid = Column(Integer , ForeignKey("user.id"))
author = relationship("User" , backref="arctires")
运行代码上述代码,然后打开mysql命令行工具输入以下代码(如下图所示,说明表成功创建)
由于我们要做删除,所以表必须要有数据才行,说干就干,插入条数据瞧瞧!
user = User(name = "tom")
arctire = Arctire(title = "hello world!")
arctire.author = user
session.add(user)
session.commit()
运行下面代码,如下所示表明数据成功插入到表中。
插入成功,下面我们就来做删除操作。首先找到父表中的数据,将父表数据删除(代码如下),看看会发生什么!
运行下面代码,如下所示表明数据成功插入到表中。
插入成功,下面我们就来做删除操作。首先找到父表中的数据,将父表数据删除(代码如下),看看会发生什么!
user = session.query(User).first()
session.delete(user)
session.commit()
从下图可以发现,父表(user)数据真的被删除了,而从表(arctire)数据依然还在,但外键uid却变为NULL了。
从下图可以发现,父表(user)数据真的被删除了,而从表(arctire)数据依然还在,但外键uid却变为NULL了。
要想避免上述现象,只需将从表中外键字段的nullable设为False即可。这样,就会拒绝删除父表数据。
原文出自汤利军博客,转载请保留链接: http://tlj.jxkos.com/server/python/73.html