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

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

承接上文,修改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

最新文章

  1. 使用命令行+ideal 工具实现本地代码项目提交
  2. CI框架源码阅读笔记9 CI的自动加载机制autoload
  3. October 14th 2016 Week 42nd Friday
  4. 【Linux】为啥查某个进程的线程,查出来的所有线程的pid不一样啊
  5. oracle用户创建及权限设置
  6. jdbc调用sparksql
  7. maven也是apache下的项目
  8. JS面向对象组件(六) -- 拖拽功能以及组件的延展
  9. C# 数据类型详解
  10. 安装m2eclipse
  11. Nexon由Xsolla全球支付服务
  12. bayboy下载安装
  13. SpringMVC轻松学习-SpringMVC介绍(一)
  14. android引用arr包
  15. Jenkins+Gradle+Docker打docker镜像包上传至s3
  16. C# 8.0的三个值得关注的新特性
  17. wamp 3.0.6(apache 2.4.23) 403 forbidden 解决办法
  18. RxAndroid防止内存泄露
  19. vmware 安装 centos7 记录笔记
  20. 使用jquery-combobox实现select下拉框多选之后,如何将下拉框的值传给input隐藏域

热门文章

  1. vue新窗口跳转路由
  2. http详解和分析
  3. VsCode代码段添加方法
  4. 五分钟学Java:一篇文章带你搞懂spring全家桶套餐
  5. 初探elasticsearch
  6. JavaScript----流程控制语句
  7. [贪心,dp] Educational Codeforces Round 71 (Rated for Div. 2) C. Gas Pipeline (1207C)
  8. windows10删除用户头像
  9. Python第四章-流程控制
  10. Python datetime 时间处理