先进行如下 *** 作:
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')))
class Student(db.Model):
__tablename__='student'
ID=db.Column(db.Integer,primary_key=True)
name=db.Column(db.String(30))
course=db.relationship('Course',secondary=Tags)
def __init__(self,name):
self.name=name
def __repr__(self):
return "name:%r" %self.name
class Course(db.Model):
___tablename__='course'
ID=db.Column(db.Integer,primary_key=True)
name=db.Column(db.String(30),unique=True)
#student_ID=db.Column(db.Integer,db.ForeignKey('student.ID'))
def __init__(self,name):
self.name=name
def __repr__(self):
return "name:%r" %self.name
>>> s1=Student('s1')
>>> s2=Student('s2')
>>> c1=Course('c1')
>>> c2=Course('c2')
>>> c3=Course('c3')
>>> s1.course=[c1,c2,c3]
>>> s2.course=[c1,c2]
>>> db.session.add(s1)
>>> db.session.add(s2)
>>> db.session.commit()
此时,在course,student,Tags中都添加了数据。
和其他关系的一样
查询数据:和其他关系的一样
删除数据:采用remove删除数据:
>>> db.session.query(Student).filter(Student.ID==1).first().course.remove(c1)#仅仅从Tags表中删除了
>>> db.session.commit()
如果从student到course存在关系,但从course到student没有关系(关系不是双向的),那么在“secondary” table中不会被删除。
如果关系是双向的,那么在“secondary” table中会自动删除。
>>> db.session.delete(s1)
>>> db.session.commit()
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
总结以上是内存溢出为你收集整理的flask-sqlalchemy 一对一,一对多,多对多 *** 作全部内容,希望文章能够帮你解决flask-sqlalchemy 一对一,一对多,多对多 *** 作所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)