会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132437个问题
JAVA 全系列/第二阶段:JAVA 基础深化和提高/IO 流技术(旧) 35971楼

  1. 老师对于下面这段代码,有一处我还能弄明白'

其中的author = relationship("User",backref=backref("comments")),怎么有时候又写成author = relationship("User",backref="comments"),“backref=”后面加backref的作用是?什么时候加呢?



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
import random

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

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)

    # articles =relationship("Article",cascade="save-update,delete") #放入Article中去优化

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
    # author = relationship("User",backref="articles",cascade="")
    # author = relationship("User",backref="articles",cascade="save-update") #明文指定 cascade的值
    # author = relationship("User",cascade="save-update,delete")
    author = relationship("User", backref = backref("articles",cascade="save-update,delete"),cascade="save-update,delete") #双向关系优化写法

class Comment(Base):
    __tablename__ = 'comment'
    id = Column(Integer, primary_key=True, autoincrement=True)
    content = Column(Text,nullable=False)
    uid = Column(Integer,ForeignKey("user.id"))

    # 优化写法
    author = relationship("User",backref=backref("comments"))

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()

    comment = Comment(content='你少说风凉话')
    comment.author = user
    session.add(comment)
    session.commit()

def oper_data():
    #relationship里边的cascade  可通过Article影响User
    # article = session.query(Article).first()
    # session.delete(article)
    # session.commit()

    # 反过来通过User也能影响Article
    user = session.query(User).first()
    session.delete(user)
    session.commit()

#总结1:relationship里边的cascade  可通过Article影响User,反过来通过User也能影响Article
#总结2:relationship里边的cascade 只会影响当前类User中relationship的模型Article,不会影响别的模型Comment
if __name__ == '__main__':
    # add_data()
    oper_data()

#ORM层面的relationship方法中cascade使用1




Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask数据库 35978楼
JAVA 全系列/第一阶段:JAVA 快速入门/JAVA入门和背景知识 35979楼
Python 全系列/第五阶段:数据库编程/mysql的使用 35984楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

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