会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 134240个问题

  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数据库 36212楼
JAVA 全系列/第一阶段:AI驱动的JAVA编程/JAVA入门和背景知识 36213楼
Python全系列/第六阶段:数据库与AI协同技术实战/mysql的使用 36218楼
JAVA 全系列/(旧的隐藏)第七阶段:JAVA 高级技术/Dubbo 36221楼
7u职场软实力/第五阶段:沟通力/第五章:批评的来源与方法 36224楼

from tkinter import *

class Application(Frame):

    def __init__(self,master):
        super().__init__(master)
        self.master=master
        self.pack()
        self.createWidget()

    def createWidget(self):
        btntext=(("MC","M+","M-","MR"),
                 ("C","±","÷","×"),
                 (7,8,9,"-"),
                 (4,5,6,"+"),
                 (1,2,3,"="),
                 (0,"."))
        Entry(self).grid(row=0,column=0,columnspan=4,pady=10)

        for rindex,r in enumerate(btntext):
            for lindex,l in enumerate(r):
                if l=="=":
                    Button(self,text=l,width=2).grid(row=rindex+1,column=lindex,rowspan=2,sticky=NSEW)
                elif l=="0":
                    Button(self,text=l,width=2).grid(row=rindex+1,column=lindex,columnspan=2,sticky=NSEW)
                elif l==".":
                    Button(self,text=l,width=2).grid(row=rindex+1,column=lindex+1,sticky=NSEW)
                else:
                    Button(self,text=l,width=2).grid(row=rindex+1,column=lindex,sticky=NSEW)

if __name__=="__main__":
    root=Tk()
    root.geometry("180x240+400+200")
    app=Application(master=root)
    root.mainloop()

批注 2019-09-24 225308.png


老师,0 为什么没有占两个单元格?

Python全系列/第二阶段:Python 深入与提高/GUI编程(隐藏) 36225楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

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