专栏首页Pythonflask-sqlalchemy 一对一,一对多,多对多操作

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,primary_key=True)

    name=db.Column(db.String(30),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.Integer,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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • flask-sqlalchemy中Datetime的创建时间、修改时间,default,server_default,onupdate

    记录第一次创建时间,default falsk中如下两个字段 create_time1 = db.Column(db.DateTime, default=dat...

    用户1214487
  • MongoDB

    一 简介 MongoDB是一款强大、灵活、且易于扩展的通用型数据库 1、易用性 MongoDB是一个面向文档(document-oriented)的数据库,而不...

    用户1214487
  • python中__get__,__getattr__,__getattribute__的区别

    __get__,__getattr__和__getattribute都是访问属性的方法,但不太相同。  object.__getattr__(self, nam...

    用户1214487
  • gorm多条数据级联查询关联查询gorm连接池gorm事务

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    hotqin888
  • python flask web开发实战 DB flask-sqlalchemy

    MySQL mysql://username:password@hostname/database Postgres postgresql://usernam...

    用户5760343
  • flask 邻接列表关系(flask 48)

    class Comment(db.Model): id = db.Column(db.Integer, primary_key=True) author =...

    用户5760343
  • flask 用户、角色、权限模型(flask 86)

    from flask import current_app from flask_avatars import Identicon from flask_l...

    用户5760343
  • 20(数据库函数库)

    Figure 20.3. Create a database and write three records to it

    提莫队长
  • Flask 项目系列 -- 基于Flask打造招聘网站(2017-12-07更新)

    简单、
  • flask 数据库关系(flask 28)

    class Writer(db.Model): books=db.relationship('Book',back_populates='writer') ...

    用户5760343

扫码关注云+社区

领取腾讯云代金券