老师,你好。
关于删除数据这一块,上一节视频删除数据的话如果外键里设置了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()

