sqlalchemy框架多对多表关系中关联表数据的添加与删除
表关系如下:
#关联关系表
t_stu_course = db.Table(
't_stu_course',
db.Column('sid',db.Integer,db.ForeignKey('stu.id',ondelete='cascade')),
db.Column('cid',db.Integer,db.ForeignKey('course.id',ondelete='cascade'))
)
#学生表
class Stu(db.Model):
__tablename__ = 'stu'
id = db.Column(db.Integer,primary_key=True,autoincrement=True,nullable=False)
sname = db.Column(db.String(32),nullable=False)
course_s = db.relationship(
'Course',
backref = db.backref('stu_s',lazy='dynamic'),
lazy = 'dynamic',
secondary = 't_stu_course'
)
#课程表
class Course(db.Model):
__tablename__ = 'course'
id = db.Column(db.Integer,primary_key=True,autoincrement=True,nullable=False)
cname = db.Column(db.String(32),nullable=False)
假设数据库中已有数据学生s1,课程c1。添加关联关系,s1选修了c1。
if __name__ == '__main__':
app = Flask(__name__)
#数据库连接
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:xxxxx@localhost:3306/flask_orm1'
db = SQLAlchemy(app)
s1 = Stu.query.filter(Stu.sname=='s1').first()
c1 = Course.query.filter(Course.cname=='c1').first()
#学生s1的课程中添加c1
s1.course_s.append(c1)
#需要session提交
db.session.commit()
删除关系学生s1选修了课程s1
#学生s1的课程中删除c1
s1.course_s.remove(c1)
#需要session提交
db.session.commit()