如何使用flask-sqlalchemy 进行多对多查询?

llfccc
  • 21

最近在用flask来做点实际的项目,但是碰到了多对多的问题卡住了,想问下这种情况怎么写查询语句呢?希望对ORM有经验的人能够解惑,我用的是flask-sqlalchemy。图片描述

回复
阅读 5.6k
2 个回答

主要解决的是用户表和课程总表的问题。
那么多对多的关系不知道你是怎么表示的?
官方文档是需要在db.relationship中声明关联。可以看一下flask-sqlalchemy文档。所以我希望你能贴一下这部分的代码。


---添加代码---

来源个人博客:http://mousehouse.applinzi.com/article/6https://segmentfault.com/a/1190000004618621

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

sc = db.Table('sc',
    db.Column('sno', db.String(10), db.ForeignKey('students.sno')),
    db.Column('cno', db.String(10), db.ForeignKey('courses.cno'))
    )


class Students(db.Model):
    __tablename__ = 'students'
    sno = db.Column(db.String(10), primary_key=True)
    sname = db.Column(db.String(10))
    
    
class Course(db.Model):
    __tablename__ = 'courses'
    cno = db.Column(db.String(10), primary_key=True)
    cname = db.Column(db.String(10), index=True)
    students = db.relationship('Student',
         secondary=sc,
         backref=db.backref('courses',lazy='dynamic'),
         lazy='dynamic'
         )
 
 #查询
student = Student.query.filter_by(sname=u'张三')  
courses  = student.courses.all()  #该学生选择的所有课程    

一对多的关系查询需要自己添加了。

举个例子,多对多最常见的例子便是在用户关注中使用。一个用户可以关注多个用户,也可以被多个用户关注。此时在ORM中表达这种关系可以把这种关注的关系拿出来单列一个表Follow。表有两列,分别是关注者和被关注者。查阅的时候就很方便了。

宣传栏