flask-sqlalchemy 一对一,一对多,多对多操作
先进行如下操作: from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy app=Flask(__name__) db=SQLAlchemy(app) 一对多:class Parent(db.Model): id=db.Column(db.Integer,primary_key=True) name=db.Column(db.String(30),unique=True) children=db.relationship("Child",backref="parent") def __init__(self,name): self.name=name def __repr__(self): return "name is %r" %self.name class Child(db.Model): id=db.Column(db.Integer,unique=True) parent_id=db.Column(db.Integer,db.ForeignKey('parent.id')) def __init__(self,name): self.name=name def __repr__(self): return "name is %r" %r >>>db.create_all() 插入数据:>>>p1=Parent('p1') >>>c1=Child('c1') >>>c2=Child('c2') >>>p1.children=[c1,c2] >>>db.session.add(p1) >>>db.session.commit() 此时,表parent和表child中都插入了数据。 或: >>>pa=Parent(''p1') >>>c1=Child('c1') >>>c2=Child('c2') >>>c1.parent=p1 >>>c2.parent=p2 >>>db.session.add(p1) >>>db.session.add(p2) >>>db.session.commit() 此时数据也被添加到数据库中了 修改数据:>>>p=db.session.query(Parent).get(1) #先查询出需要修改的条目 或: >>>Parent.query.get(1) 然后 >>>p.name='p2' #修改 >>>db.session.commit() #修改成功,的确很方便 或者直接用一条语句: #直接查询出后修改,update采用字典修改{修要修改的列:'修改后的值'} >>>db.session.query(Child).filter(Child.id==1).update({Child.name:'c3'}) >>>db.session.commit() 删除数据:首先需要查找出需要删除的数据: >>>c=db.session.query(Child).filter(Child.id==2).first() #找到一个类 然后将其删除: >>>db.session.delete(c) >>>db.session.commit() 删除parent和删除child一样,不过删除parent后,child的外键变为空(null)。 查询数据:查询child所属的parent: >>>db.session.query(Child).filter(Child.name=='c1').first().parent 或: >>>Child.query.filter(Child.name=='c1').parent 查询parent的child: >>>db.session.query(Parent).filter(Parent.name=='p1').first().children 或: >>>Parent.query.filter(Child.name=='c1').children 一对一:一对一需要设置relationship中的uselist=Flase,其他数据库操作一样。 多对多:创建表: tags=db.Table('tags',db.Column('student_id',db.Integer,db.ForeignKey('student.id')),db.Column('course_id',db.ForeignKey('course.id'))) 添加数据:>>> s1=Student('s1') 更新数据:和其他关系的一样 查询数据:和其他关系的一样 删除数据:采用remove删除数据: >>> db.session.commit() 如果关系是双向的,那么在“secondary” table中会自动删除。 >>> db.session.delete(s1) https://my.oschina.net/935572630/blog/373744 http://www.thatyou.cn/flask使用flask-sqlalchemy操作mysql数据库%EF%BC%88三%EF%BC%89-联表一对多查询/ http://www.bubuko.com/infodetail-1696901.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |