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:[email protected]: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('/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

猜你喜欢

转载自blog.csdn.net/itlanyue/article/details/81126491