多对多
创建
- 相对于django,自己相当于做了完全的工作,三张表都自己来创建
1.多 ,至少有一个主键字段
2.中间表,创建两个外键来关联这两个表的主键
sc = db.Table('sc',
db.Column('s_id', db.Integer,db.ForeignKey('student.s_id')),
db.Column('c_id', db.Integer, db.ForeignKey('course.c_id'))
)
3.多,至少有一个主键字段,选取两个表中的任意一个,来写对应的关系,relationshio,相比一对多,多了个secondary,填写中间表的参数
students = db.relationship('Student', secondary=sc, backref='cou')
使用
(1) 查询
1. stu = Student.query.get(id) 实例化对象
2. stu.cou
3. cou = Course.query.get(id)
4. cou.students
(2)添加数据
1. sql添加
* sql = 'insert into sc(s_id,c_id) value (%s, %s);' % (s_id, c_id)
* db.session.execute(sql)
2. 普通添加
* stu = Student.query.get(s_id)
* cou = Course.query.get(c_id)
* stu.cou.apppend(cou) / cou.students.append(stu)
* db.session.add(cou/stu) add_all()
* db.session.commit()
(3)删除数据
1. 普通删除,不是delete,用remove
* stu = Student.query.get(s_id)
* cou = Course.query.get(c_id)
* stu.cou.remove(cou)
* db.session.commit()
2. sql
* sql = 'delete from sc where s_id =%s and c_id= %s;' % (sid, cid)
* db.session.execute(sql)
* db.session.commit()
项目的重构
思想
- 把公共的文件统一放到一起,需要的时候直接调用
- 规范化
做法
- 新建文件夹utils,里面创建App.py,function.py,settings.py
App.py
- 初始化app,让其他需要注册的插件在这里和app绑定
- 蓝图的绑定
- debug的绑定和配置
- 数据库的绑定和配置
- rest_ful的绑定
- marshmallow的绑定
function.py
- 公共的方法写在这里,用来呗引用
- 数据库连接的国际方法改写为自己适用的方法
settings.py
- 基本配置,基础路径,页面模板,静态模板
- 数据库的官方格式
debug
作用
- 查看历史安装了哪些包
- 查看网页加载用时
- 查看使用了数据库调用的sql语句
- 查看所有的接口
配置
- 初始化
- 注册
- 开启(被动使用)
- app.debug = True
- app.config[‘SCRET_KEY’] = ‘secret_key’
rest_ful
作用
- 可以很方便的对绑定的表进行增删查改
- 但是一个rest_ful只能绑定一个表
配置
- 初始化
- 注册
使用 views里使用
- 定义一个类,继承Resource
- 定义方法,定义增删改查方法
- 返回数据。此处可以配合marshmellow使用,
- marshmellow是用来序列化数据,的
class HelloStudent(Resource):
def get(self, id):
stu = Student.query.get(id)
return stumarsh.jsonify(stu)
marshmellow
配置
- 初始化 ma = Marshmallow()
- 注册 ma.init_app(app=app)
使用
- 定义一个Marshmallow文件,在这里写筛选条件
- 用来给restful继承,将数据返回
class StuMarsh(ma.Schema):
class Meta:
# 筛选,修饰
fields = ('s_name', 's_age')
stumarsh = StuMarsh()