每当有事情发生, 懦夫会问: '这么做安全吗?' 患得患失者会问: '这么做明智吗?' 虚荣者会问: '这么做受欢迎吗?' 但是良知只会问: '这么做正确吗[email protected]马丁.路德.金 (美国人权领袖)

Flask处理集成SQL(一)

Python 2017-07-22 浏览量: 1953 字数统计: 445 最后更新: 2017-07-22 09:54

文章目录[显示]

真的是好久不见哈!问 干啥去了,一个多月都没吱声,只想说前阵子太忙了,一直没有抽出时间来码文章,果然俺还不是一个合格的博主,但俺会努力成为一个合格的博主!好了废话就不多说了,来点正经的吧,今天咱们简单的说说SQL与框架中集成的SQL

在这里,我们只说多对多的关系,因为多对多直接就包含了一对多,理解了多对多基本一对多也就理解了

多对多表的时候是这样的

有两个表,一个是页面,一个是标签,多对多关系,一个页面有多个标签,一个标签可以在多个页面显示(当然多对多的例子很多,比如说学生选课等等,一个学生可以选多门课程,一个课程可以被多个人选择)

则这么定义

relationships = db.Table('relationships ',
    db.Column('tag_id', db.Integer, db.ForeignKey('tags.id')),
    db.Column('page_id', db.Integer, db.ForeignKey('pages.id')))

tags =

class Page(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)
    tags = db.relationship('Tag', secondary=relationships,
             backref=db.backref('pages', lazy='dynamic'),
                lazy='dynamic'))
 

class Tag(db.Model):
    id = db.Column(db.Integer, primary_key=True)
     name = db.Column(db.String)

用db.relationship() 方法定义,而且在多对多关系里面,必须把secondary 参数设置为关联的表,而且关联的表示一个正常的表,不是模型,

应用

处理关联关系,说一下传统意义上的查询管理

比如说我想查询某一个页面(page)对应的标签(tag),这里假设页面的实例是p,标签的实例是t

用flask集成的管理就可以这么写

t.pages.all()
p.tages.all()

如果我们换成传统意义上的SQL语句则是这样的(这里我就不考虑性能的损耗了,直接全是*)

select * from tages left join relationships on tages.tag_id=relationships.tag_id left join pages on pages.page_id=relationships.page_id where tages.tage_id=?

select * from pages left join relationships on pages.page_id=relationships.page_id left join tages on tages.tage_id=relationships.tage_id where pages.page_id=?

页面添加tag 的代码就是

p.tages.append()
db.session.add(p)

则SQL就应该是 直接 insert 一条记录

如果 某个页面删除一个tag ,则

p.tages.remove()

而SQL则直接是 delete 一条记录

果然对于俺来说看SQL更舒服一些


参考资料

  1. http://flask-sqlalchemy.pocoo.org/2.1/models/
小蜗牛 说:
Freedom is the source from which all meaning and all values spring .


文章版权归 原文作者所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权| 转载必须包含本声明,并以超链接形式注明原文作者和本文原始地址: https://www.tougetu.com/2017/07/python-flask-sql-1.html

还不快抢沙发

添加新评论

代码 Pastebin Gist 加粗 删除线 斜体 链接 签到