zoukankan      html  css  js  c++  java
  • ORM SQLAlchemy

    1 一对多

    一个parent对多个child,一对多关系添加一个外键到child表,用于保存对应parent.id的值,引用parent。relationship()在parent中指定,引用/保存 一批 child 表中关联的条目

    class Parent(Base):
        __tablename__ = 'parent'
        id = Column(Integer, primary_key=True)
        children = relationship("Child")
    
    class Child(Base):
        __tablename__ = 'child'
        id = Column(Integer, primary_key=True)
        parent_id = Column(Integer, ForeignKey('parent.id'))


    建立一个双向关系
    class Parent(Base):
        __tablename__ = 'parent'
        id = Column(Integer, primary_key=True)
        children = relationship("Child", backref="parent")
    
    class Child(Base):
        __tablename__ = 'child'
        id = Column(Integer, primary_key=True)
        parent_id = Column(Integer, ForeignKey('parent.id'))
    child将因此获得一个parent属性, 值为对应的parent表中的条目


    2 多对一

    多个parent对一个child。多到一 在parent表添加一个外键,保存child.id的值。relationship()在parent中被宣告,创建一个新的属性child,保存关联的child表的条目。

    class Parent(Base):
        __tablename__ = 'parent'
        id = Column(Integer, primary_key=True)
        child_id = Column(Integer, ForeignKey('child.id'))
        child = relationship("Child")
    
    class Child(Base):
        __tablename__ = 'child'
        id = Column(Integer, primary_key=True)

    3 一对一

    本质上是一种同时在两边设置一个数量的属性的双向关系。为了达到这个目标, 设置一个限制数量的属性uselist=False替代关系的many侧的集合

    class Parent(Base):
        __tablename__ = 'parent'
        id = Column(Integer, primary_key=True)
        child = relationship("Child", uselist=False, backref="parent")
    
    class Child(Base):
        __tablename__ = 'child'
        id = Column(Integer, primary_key=True)
        parent_id = Column(Integer, ForeignKey('parent.id'))
    或者

    class Parent(Base):
        __tablename__ = 'parent'
        id = Column(Integer, primary_key=True)
        child_id = Column(Integer, ForeignKey('child.id'))
        child = relationship("Child", backref=backref("parent", uselist=False))
    
    class Child(Base):
        __tablename__ = 'child'
        id = Column(Integer, primary_key=True)


    4 多对多

    多对多关系需要在两个类之间增加一个关系表。关系表通过relationship()的secondary参数标识。通常,Table使用基类的MetaData对象关联宣告,所以ForeignKey的声明可以定位链路远端的表

    association_table = Table('association', Base.metadata,
        Column('left_id', Integer, ForeignKey('left.id')),
        Column('right_id', Integer, ForeignKey('right.id'))
    )
    
    class Parent(Base):
        __tablename__ = 'left'
        id = Column(Integer, primary_key=True)
        children = relationship("Child", secondary=association_table)
    
    class Child(Base):
        __tablename__ = 'right'
        id = Column(Integer, primary_key=True)


  • 相关阅读:
    网络编程之粘包问题
    网络编程初识和socket套接字
    面向对象三大特性
    面向对象进阶
    面向对象初接触
    常用模块(模块初步了解)
    异常处理
    Ubutu Chrome 出现adobe flash is out of date的解决方法
    cmder默认的命令提示符λ改成$
    css在盒子中垂直居中和固定居中
  • 原文地址:https://www.cnblogs.com/sysnap/p/6511084.html
Copyright © 2011-2022 走看看