会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132452个问题
JAVA 全系列/第五阶段:JavaWeb开发/Web实战案例 16652楼
JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 16656楼
Python 全系列/第十阶段:Flask百战电商后台项目/Flask百战电商后台项目 16657楼
JAVA 全系列/第六阶段:项目管理与SSM框架/Mybatis 16659楼
Python 全系列/第三阶段:Python 网络与并发编程/网络通信 16660楼

老师,你好。

关于删除数据这一块,上一节视频删除数据的话如果外键里设置了nullable=Flase,外键就设不了为空,主键自然也就删除不了,没有给nullable=Flese的话外键值会设置为NUll,然后会把主键的数据也给干掉的啊。

在本章视频中老师并没有在外键里设置这个nullable类型,而是直接用delete就可以删除数据,删除的数据只是把指定的数据给删除,并没有把关联表的主键数据给删除,这是为什么呢,我已经懵圈了。

from sqlalchemy import create_engine,Column,Integer,Float,Boolean,DECIMAL,Enum,\
    Date,DateTime,Time,String,Text,func,or_,and_,ForeignKey,Table
from sqlalchemy.dialects.mysql import LONGTEXT
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker,relationship,backref

HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'first_sqlalchemy'
USERNAME = 'root'
PASSWORD = '123456'

DB_URI ="mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8".format(username=USERNAME,password=PASSWORD,host=HOSTNAME,port=PORT,db=DATABASE)

engine = create_engine(DB_URI)
Base = declarative_base(engine)

session = sessionmaker(engine)()

class User(Base):
    __tablename__ = 'user'
    id = Column(Integer,primary_key=True,autoincrement=True)
    uname = Column(String(50),nullable=False)

class Article(Base):
    __tablename__ = 'article'
    id = Column(Integer, primary_key=True, autoincrement=True)
    title = Column(String(50), nullable=False)
    #使用外键与主表关联一起
    uid = Column(Integer,ForeignKey("user.id"))

    author=relationship('User',backref='articles')  #cascade默认为save-update

#增加数据
def add_data():
    Base.metadata.drop_all() #删除表
    Base.metadata.create_all()  #重新创建表

    user = User(uname="momo")
    article = Article(title="华为5G")
    article.author = user
    session.add(article)
    session.commit()

#删除数据
def oper_data():
    article = session.query(Article).first()  #查找Article中的第一条数据
    session.delete(article)                   #删除
    session.commit()                          #提交

if __name__ == '__main__':
    # add_data()
    oper_data()

image.pngimage.png

Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask数据库 16661楼
JAVA 全系列/(旧的隐藏)第二十一阶段:百战商城项目(Spring Cloud最新架构)/百战商城项目 16662楼
JAVA 全系列/第十三阶段:高性能数据处理、NoSQL、分库分表/Redis 16663楼
Python 全系列/第一阶段:Python入门/序列 16665楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637