SQLAlchemy在删除有外键约束的记录时,外键约束未起作用,何解?

一、环境:pyqt5+python 3.7+SQLAlchemy 1.4.36+mysql 8.0

二、相关表结构如下:

class maintenanceZone(Base):
    __tablename__ = "maintenanceZone"  # 区域信息
    __table_args__ = {
        "mysql_engine": "InnoDB",
    }

    id = sa.Column(sa.Integer(), primary_key=True, autoincrement=True)
    cityName = sa.Column(sa.String(100), nullable=False )
    countyName = sa.Column(sa.String(100), nullable=False)




class maintainerInfo(Base):
    __tablename__ = "maintainerInfo"  #人员信息
    __table_args__ = {
        "mysql_engine": "InnoDB",
    }

    id = sa.Column(sa.Integer(), primary_key=True, autoincrement=True)
    userName = sa.Column(sa.String(100), unique=True, nullable=False, comment="人员姓名")
    userPhone = sa.Column(sa.String(20), unique=True, comment="人员联系电话")
    zoneID = sa.Column(sa.Integer(),
                       sa.ForeignKey("maintenanceZone.id", ondelete="RESTRICT", onupdate="CASCADE"), comment="区域ID")

    zoneinfo = relationship("maintenanceZone", backref=backref('maintainerInfo', order_by=id))

三、相关代码如下:

zoneOne = session.query(maintenanceZone).filter(maintenanceZone.cityName == old_city,maintenanceZone.countyName == old_country).one()
session.delete(zoneOne)
session.commit()

四、数据库engine代码如下:

dburl = "mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8".format(dbIni["user"], dbIni["password"],dbIni["host"], dbIni["port"], dbIni["db"])
engine = create_engine(
            url=dburl,
            max_overflow=0, 
            pool_size=5,
            pool_timeout=20,
            pool_recycle=-1,
        )

五、问题如下:

1、在mysql8.0中,通过sql语删除maintenanceZone表中记录时,会触发外键约束,提示无法删除;

2、在python代码中通过SQLAlchemy删除maintenanceZone表中同一记录时,没有任何提示,直接删除!

 

六、SQLAlchemy执行时反馈信息:

先执行update把maintainerInfo表中的记录置为Null,然后在maintenanceZone中删除了该记录。

2022-06-24 18:12:03,245 INFO sqlalchemy.engine.Engine [generated in 0.00021s] {'param_1': 19}
2022-06-24 18:12:03,249 INFO sqlalchemy.engine.Engine UPDATE `maintainerInfo` SET `zoneID`=%(zoneID)s WHERE `maintainerInfo`.id = %(maintainerInfo_id)s
2022-06-24 18:12:03,249 INFO sqlalchemy.engine.Engine [generated in 0.00021s] {'zoneID': None, 'maintainerInfo_id': 1}
2022-06-24 18:12:03,267 INFO sqlalchemy.engine.Engine DELETE FROM `maintenanceZone` WHERE `maintenanceZone`.id = %(id)s
2022-06-24 18:12:03,267 INFO sqlalchemy.engine.Engine [generated in 0.00016s] {'id': 19}
2022-06-24 18:12:03,268 INFO sqlalchemy.engine.Engine COMMIT

 

 

如何禁止SQLAlchemy在删除maintenanceZone表记录时的默认update操作?

 

 

 

python
SQLAlchemy
外键约束失效
5天前
浏览
已于2022-6-24 18:37:58修改
收藏 0
回答 0
待解决
相关问题
hilogprivate参数不起作用
2185浏览 • 1回复 待解决
Preferences不起作用
1358浏览 • 1回复 待解决
串口线连接PC识别,如何解决?
4438浏览 • 1回复 待解决
DevEco Studio快捷怎么用
1598浏览 • 1回复 待解决
鸿蒙-如何实现类似于HOME功能
6592浏览 • 2回复 待解决
通知栏里边快捷重叠了
1791浏览 • 1回复 待解决
DevEco Studio 3.0 Beta3新增快捷
3593浏览 • 1回复 待解决
物联网中鸿蒙系统起到什么作用
1841浏览 • 1回复 待解决
串口线连接PC识别
2632浏览 • 1回复 待解决
当前是否具备记录dump文件能力
5372浏览 • 1回复 待解决
codelabs中VideoApplication视频显示
2088浏览 • 1回复 待解决
鸿蒙中资源文件都又什么作用
772浏览 • 1回复 待解决
IOT医疗领域哪些应用?
465浏览 • 1回复 待解决