我们在flask的学习中,会难免遇到多对多表的查询,今天我也遇到了这个问题。那么我想了好久。也没有想到一个解决的办法,试了几种方法,可能是思路的限制我放弃了,后来,我就在网上百度,可是发现百度出来的结果和自己想要的还有一定的差距,那么我根据百度上得来的思路,那么我也对我的数据结构进行了探索, 下面来看看我这里怎么来查询的,首先给大家看下我写的数据库的代码的片段,这样,加深理解。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
post_class = db.Table( 'post_class' , db.Column( 'post_id' ,db.Integer(),db.ForeignKey( 'posts.id' )), db.Column( 'classifa_id' ,db.Integer(),db.ForeignKey( 'fenlei.id' ))) class Post(db.Model): #文章表 __tablename__ = 'posts' id = db.Column(db.Integer,primary_key = True ,autoincrement = True ) title = db.Column(db.String( 255 ),unique = True ) text = db.Column(db.Text()) publish_date = db.Column(db.DateTime,default = datetime.datetime.now()) user_id = db.Column(db.Integer,db.ForeignKey( 'users.id' )) is_recomment = db.Column(db.Boolean,default = False ) comments = db.relationship( 'Comment' , backref = 'posts' , lazy = 'dynamic' ) tag = db.relationship( 'Tag' , secondary = posts_tags, backref = db.backref( 'posts' , lazy = 'dynamic' ) ) classname = db.relationship( 'Classifa' , secondary = post_class, backref = db.backref( 'posts' )) def __repr__( self ): return "<Model Post `{}`>" . format ( self .title) class Classifa(db.Model): #分类 __tablename__ = 'fenlei' id = db.Column(db.Integer(),primary_key = True ) name = db.Column(db.String( 64 )) def __repr__( self ): return self .name |
这里有三张表,一张呢是文章的列表,另一张呢,是分类表,我们来想下,一篇文章可能同时属于多个分类,那么一个分类可能也属于多个文章,这么来说想必我们大家都能理解这个逻辑,那么呢,我第三表来显示多对多关系的,那么我们接下来怎么去查询呢,其实我现在的需求就是我要找个一个分类下面所有的文章吧,
下面来看看我的代码
1
2
|
data = Classifa.query.filter_by(name = '数据库' ).first() data_post = data.posts |
这里呢,我直接先从分类找到这个分类,然后通过第三表来查询属于这个分类的文章、其实呢 这里很简单,可能是我当时自己的脑子短路了吧, 不知道怎么想是对的,现在来看 其实还是那么的简单,只是当时我忽略了什么。 加油,学习前进的路上。
原文链接:http://www.cnblogs.com/leiziv5/archive/2017/06/24/7074634.html