首页 > flask-sqlalchemy 如何查询关系表中的一个字段?

flask-sqlalchemy 如何查询关系表中的一个字段?

class Things(db.Model):
    __tablename__ = 'things'
    id = db.Column(db.Integer, primary_key=True)
    things_name = db.Column(db.String(64))
    things_list = db.relationship('List', secondary=things_plus_list,
                                  backref=db.backref('list_things', lazy='dynamic'),
                                  lazy='dynamic')
class List(db.Model):
    __tablename__ = 'list'
    id = db.Column(db.Integer, primary_key=True)
    list_name = db.Column(db.String(64), unique=False)
                                      
things_plus_list = db.Table('things_plus_list',
                            db.Column('things_id', db.Integer, db.ForeignKey('things.id')),
                            db.Column('list_id', db.Integer, db.ForeignKey('list.id')),
                            db.Column('create_time', db.DateTime, default=datetime.now)
                            )
                            

以上是看flask时间开发,学习动手搞个小网站,用flask-sqlalchemy构建的数据库模型,「things_plus_list」是一个关系表,表示的是东西(things)和清单(List)的关联关系,目前学会如何查询东西所属的所有清单,也懂得如何查询清单下所有的东西,但有一个实现没有思路,想请大神指点一下思路即可,或者有资料的大神恳请贴一下地址:

实现是:查询出某个清单所有的东西,然后按他们关联起关系的时间倒序排序东西。即关系表「things_plus_list」中有一个字段「create_time」我没有思路怎么利用起来。

请大神指点。解决问题我会私信你索取支付宝,小弟送上30元烟钱请大神抽包烟。


这是我的数据模型,和你的需求大致相同,按照关联表中的时间字段来排序

class Film(db.Model):
    '''电影'''

    __tablename__ = 'film'


    id = db.Column(db.Integer, primary_key=True)
    # 电影名字
    name = db.Column(db.String, default='')
    
    # 重点在这里......
    tag_maps = relationship(
        'TagImgMap',
        primaryjoin="and_(TagFilmMap.film_img_id==Film.id)",
        order_by=lambda: TagFilmMap.date_create.desc()  # 按照关联表中的关联时间降序排序
    )
    # 关联的所有标签(这里的顺序时根据上面排序出来的)
    tags = association_proxy('tag_maps', 'tag')

class Tag(db.Model):
    '''标签'''

    __tablename__ = 'tag'

    id = db.Column(db.Integer, primary_key=True)
    # 标签名
    name = db.Column(db.String(255), default=u'')
    # 标签创建时间
    date_create = db.Column(db.DateTime, default=datetime.now)


class TagFilmMap(db.Model):
    '''标签电影关联表'''

    __tablename__ = 'tag_film_map'

    id = db.Column(db.Integer, primary_key=True)
    # 标签id
    tag_id = db.Column(db.Integer, db.ForeignKey('tag.id'))
    # 电影id
    film_id = db.Column(db.Integer, db.ForeignKey('film.id'))

    # 关联时间
    date_create = db.Column(db.DateTime, default=datetime.now)


# 使用
filmobj = Film.query.filter(Film.id == 5).first()  # 获取电影id为`5`的电影
filmobj.tag_maps  # 这里输出的就是要按照指定排序出来的关联数据
filmobj.tags  # 这里输出的就是要按照指定排序出来的标签数据

http://docs.sqlalchemy.org/en/rel_0_9/orm/tutorial.html#building-a-many-to-many-relationship
filter后面用order_by()排序

【热门文章】
【热门文章】