nival 2022-06-24 17:38 采纳率: 100%
浏览 39
已结题

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删除maintenanceZone表记录时,外键约束未何未生效?????

  • 写回答

1条回答 默认 最新

  • llc的足迹 2022-06-25 15:11
    关注

    maintainerInfo表中的zoneID字段nullable默认为True,删除maintenanceZone中的记录时将其设置为NULL,这是允许的。
    因此将nullable设置为False,删除的时候就会抛出约束错误了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 7月3日
  • 已采纳回答 6月25日
  • 创建了问题 6月24日

悬赏问题

  • ¥15 在linux系统下vscode运行robocup3d上场球员报错
  • ¥15 Python语言实验
  • ¥15 SAP HANA SQL 增加合计行
  • ¥20 用C#语言解决一个英文打字练习器,有偿
  • ¥15 srs-sip外部服务 webrtc支持H265格式
  • ¥15 在使用abaqus软件中,继承到assembly里的surfaces怎么使用python批量调动
  • ¥15 大一C语言期末考试,求帮助🙏🙏
  • ¥15 ch340驱动未分配COM
  • ¥15 Converting circular structure to JSON
  • ¥30 Hyper-v虚拟机相关问题,求解答。