Python全系列 教程
3567个小节阅读:5930.6k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
ORM层面删除数据,会无视mysql级别的外键约束。
直接会将对应的数据删除,然后将从表中的那个外键设置为NULL,也就是数据库的SET NULL
。
如果想要避免这种行为,应该将从表中的外键的nullable=False
。
xxxxxxxxxx
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship
from db_util import Base, Session
class User(Base):
__tablename__ = 't_user'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(32))
class Article(Base):
__tablename__ = 't_article'
id = Column(Integer, primary_key=True, autoincrement=True)
title = Column(String(32))
uid = Column(Integer, ForeignKey("t_user.id"))
# uid = Column(Integer, ForeignKey("t_user.id"),nullable = False)
user = relationship('User',backref='articles')
def create_data():
Base.metadata.drop_all() # 删除已有的表
Base.metadata.create_all() # 创建表
# 初始化数据
user = User(name='SXT')
art1 = Article(title='Python', uid=1)
art2 = Article(title='MySQL', uid=1)
user.articles.append(art1)
user.articles.append(art2)
with Session() as ses:
ses.add(user)
ses.commit()
def delete_data():
# 默认删除主表数据时,会将子表的引用主表数据的外键设置Null
with Session() as ses:
user = ses.query(User).first()
ses.delete(user)
ses.commit()
if __name__ == '__main__':
# create_data()
delete_data()
实时学习反馈
1. 在SQLAlchemy中,删除含有表关系的数据时,说法正确的是?
A 默认删除主表数据,会把子表数据设置为null
B 默认删除主表数据,会把子表数据删除
C 默认删除主表数据,若子表有数据,则不允许删除
D 默认删除子表数据,主表数据也会删除
答案
1=>A