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
Flask 入门 (十一)的更多相关文章
- Flask入门笔记(一)
一.程序的基本结构 1.1 最简单的Flask程序 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #coding=utf-8 # 初始化 from flask import Fla ...
- Flask入门HelloWorld
Flask入门HelloWorld Flask官网:http://flask.pocoo.org/ Flask中文翻译:http://dormousehole.readthedocs.io/en/la ...
- Flask入门之结构重组(瘦身)-第13讲笔记
1. pip list Flask 0.10.1 Flask-Bootstrap 3.3.5.6 Flask-SQLAlchemy 2 Flask-Script 2.0.5 Flask-WTF 0.1 ...
- Flask入门之Bootstrap介绍使用和Flask-Nav快速导航栏
一.Bootstrap Bootstrap,来自 Twitter,是目前最受欢迎的前端框架. Python中,同样可以使用Bootstrap. 1. 导入Bootstrap库 from flask_b ...
- Flask入门之Pycharm写Hello Word
在这里记录整理Flask入门的笔记! 今天讲讲使用Pycharm写一个Hello World 前提是已经安装好Pycharm,安装过程很简单,这里不赘述. 只放两个可以提供注册码的网站: Intell ...
- Flask入门和快速上手
目录 Flask入门和快速上手 python三大主流框架对比 Flask安装 依赖 可选依赖 创建flask项目 flask最小应用--hello word 非法导入名称 调试模式 路由 唯一的 UR ...
- Flask 入门一( flask 框架和 flask-script 库)
Flask 入门一( flask 框架 和 flask-script 库) 一.Flask框架: 1.简介 Flask是一个非常小的Python Web框架,被称为微型框架:只提供了一个稳健的核心,其 ...
- C#基础入门 十一
C#基础入门 十一 复选框 复选框的应用--问卷调查 实现描述:通过问卷调查统计性别和下班后回家的方式,单击"提交"按钮,通过消息框显示所提交的信息.运行结果如下图所示(图27): ...
- Flask入门 flask结构 url_for 重定向(一)
Flask入门(一) 1 安装虚拟环境Mac,linux sudo pip install virtualenv ubuntu系统 sudo apt-get install python-virt ...
- Flask入门系列(转载)
一.入门系列: Flask入门系列(一)–Hello World 项目开发中,经常要写一些小系统来辅助,比如监控系统,配置系统等等.用传统的Java写,太笨重了,连PHP都嫌麻烦.一直在寻找一个轻量级 ...
随机推荐
- python3使用js2py
安装: pip install js2py 使用: 执行js函数: 执行js函数: import js2py js = js2py.EvalJs({}) js.execute("" ...
- .NET Conf: Xamarin专场会议3.23 开幕
聚焦于 Xamarin 的 NET Conf 是一项免费的为期一天的直播活动,来自社区和.NET产品团队的演讲者正在使用Xamarin技术构建本机移动应用程序!Xamarin允许您使用C#(而不是Ja ...
- 聊一聊React中虚拟DOM
1. 什么是虚拟 DOM 在 React 中实际上是 render 函数中return 的内容会生成 DOM,return 中的内容由两部分组成,一部分是 JSX ,另一部分就是 state 中的数据 ...
- javaScript 基础知识汇总(九)
1.Rest 参数 与 Spread 操作符 当我们在代码中遇到“..."时,它不是Rest参数就是Spread操作符 区分方法: 若...出现在函数的参数列表,那它表示的就是Rest参数, ...
- JavaScript隐式类型转换(详解 +,-,*,/,==)
JavaScript 在 运算 或 比较 之前, 会自动进行隐式类型转换. 下面我们来仔细讲一讲 + - * / == 运算符经历了哪些过程. 类型转换 ECMAScript 运行时系统会在需要时从事 ...
- Burpsuite被动扫描流量转发插件:Passive Scan Client
编译成品:链接: https://pan.baidu.com/s/1E0vsPGgPgB9bXCW-8Yl1gw 提取码: 49eq Passive Scan Client Burpsuite被动扫描 ...
- [转载]-虚拟键值表-virtual key code
转载 虚拟键值表, virtual key code Virtual-Key Codes VK_LBUTTON (01)Left mouse button VK_RBUTTON (02)Right ...
- 洛谷 P1047 校门外的树 题解
Case 1. 本题其实不难,直接模拟就可以了.时间复杂度: \(O(L \times M)\) Case 2. 考虑一个简单的增强:把原来的: \[L \leq 10^4,M \leq 10^2 \ ...
- Redis学习笔记1-java 使用Redis(jedis)
一.远程操作Redis 1. 在windows环境下安装RedisDesktopManager 2. 打开RedisDesktopManager 3. Add New Connection 4. 右击 ...
- PHP7内核(四):生命周期之开始前的躁动
上一章我们对PHP的源码目录结构有了初步了解,本章我们继续从生命周期的维度对PHP进行剖析. 一.概览 生命周期是什么呢?你可以把它看作执行过程,PHP的生命周期也就是它从开始执行到结束执行的过程. ...