上篇文章讲的是一对多,这篇文章应该说多对多了
但是多对多无法用两张表来实现,因为外键......,你懂,哈哈哈!,所以中间需要加一张表来实现
承接上文,修改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