zoukankan      html  css  js  c++  java
  • Flask 入门 (十一)

    上篇文章讲的是一对多,这篇文章应该说多对多了

    但是多对多无法用两张表来实现,因为外键......,你懂,哈哈哈!,所以中间需要加一张表来实现

    承接上文,修改main.py中的代码如下:

    #encoding:utf-8
    from flask_sqlalchemy import SQLAlchemy
    from flask import Flask
     
    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI']='mysql+pymysql://root:005@127.0.0.1:3306/data'
    app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False
    app.config['JSON_AS_ASCII']=False

    db = SQLAlchemy(app)
    db = SQLAlchemy(use_native_unicode='utf8')

    Student_Teacher=db.Table(

            'Student_Teacher',
            db.Column('tea_id',db.Integer,db.ForeignKey('tea.id'),primary_key=True),
            db.Column('stu_id',db.Integer,db.ForeignKey('stu.id'),primary_key=True)
    )

    class Student(db.Model):
        __tablename__='stu'
        id=db.Column(db.Integer,primary_key=True,autoincrement=True)
        name=db.Column(db.String(20),nullable=False)

        
    class Teacher(db.Model):
        __tablename__='tea'
        id=db.Column(db.Integer,primary_key=True,autoincrement=True)
        name=db.Column(db.String(20),nullable=False)
        students=db.relationship('Student',secondary=Student_Teacher,backref=db.backref('mytea'))

        
    @app.route('/')
    def index():
        db.create_all()
        return '欢迎登录'

    @app.route('/addinfo/')
    def addinfo():
        s1=Student(name='s1')
        s2=Student(name='s2')
        s3=Student(name='s3')
        t1=Teacher(name='t1')
        t2=Teacher(name='t2')
        t3=Teacher(name='t3')

        t1.students.append(s2)
        t1.students.append(s3)

        t2.students.append(s1)
        t2.students.append(s3)

        t3.students.append(s1)
        t3.students.append(s2)

        db.session.add(t1)
        db.session.add(t2)
        db.session.add(t3)
        db.session.add(s1)
        db.session.add(s2)
        db.session.add(s3)
        db.session.commit()
        
        return '添加成功!'

    @app.route('/del/<tea_name>/<stu_name>/')
    def delnfo(tea_name,stu_name):
        t = Teacher.query.filter(Teacher.name==tea_name).first()
        s = Student.query.filter(Student.name==stu_name).first()
        t.students.remove(s)
        db.session.commit()

        return '删除成功!'

    @app.route('/find_stu/<tea_name>/')
    def find_stu(tea_name):
        tea_temp=Teacher.query.filter(Teacher.name==tea_name).first()
        stus=tea_temp.students
        allname=''
        for stu_temp in stus:
            allname=allname+stu_temp.name+'  '
        return allname

    @app.route('/find_tea/<stu_name>/')
    def find_tea(stu_name):
        stu_temp=Student.query.filter(Student.name==stu_name).first()
        teas=stu_temp.mytea
        allname=''
        for tea_temp in teas:
            allname=allname+tea_temp.name+'  '
        return allname
        

    if __name__=='__main__':
        app.run(debug=True)

    打开浏览器,执行

    127.0.0.1:5000

    回车

    127.0.0.1:5000/addinfo/

    回车

    127.0.0.1:5000/find_stu/t1

    输入

    127.0.0.1:5000/find_tea/s1

    想看大神详细的讲解,请看:

    https://blog.csdn.net/ying847782627/article/details/51333090

    https://blog.csdn.net/qq_28877125/article/details/77664575

  • 相关阅读:
    postgresql导入及导出
    高效构建Web应用 教你玩转Play框架 http://www.anool.net/?p=577
    强制远程桌面
    js对日期操作 获取两个日期的相差是否在几月之内
    ACM 擅长排列的小明
    路由vue-router
    小村系列之十五:倒了(修订版)
    小村系列之十三:次贷危机
    小村系列之十:民族主义的兴衰
    小村系列之八:村长开会
  • 原文地址:https://www.cnblogs.com/viplanyue/p/12700684.html
Copyright © 2011-2022 走看看