时间:2021-07-01 10:21:17 帮助过:20人阅读
只使用外键,需要使用join才可以取出数据
#上面不存在relationship
ret = session.query(Father.name.label(‘kkk‘),Son.name.label("ppp")).join(Son).all()#使用Join才可以获取对方数据 print(ret)#是一个列表,列表中存在所要获取的数据(以元组存在)
在外键基础上使用relationship:可以直接通过属性操作获取数据
#使用了relationship
ret = session.query(Father).filter_by(id=1).first() print(ret.son)#是一个对象列表,其中包含了所有查询数据
全部代码:
其中son = relationship(‘Son‘,backref="Father")
相当于在Son中加入father = relationship(‘Father‘)在Father中加入son = relationship(‘Son‘)
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy import Column,String,Integer,ForeignKey
from sqlalchemy.orm import sessionmaker,relationship
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine("mysql+pymysql://root:root@127.0.0.1/t1")
Base = declarative_base()
class Father(Base):
__tablename__ = "father"
id = Column(Integer,primary_key=True,autoincrement=True)
name = Column(String(40),unique=True)
age = Column(Integer)
son = relationship(‘Son‘,backref="Father")
#son = relationship(‘Son‘)
class Son(Base):
__tablename__ = ‘son‘
id = Column(Integer,primary_key=True,autoincrement=True)
name = Column(String(40),unique=True)
age = Column(Integer)
#father = relationship(‘Father‘)
father_id = Column(Integer,ForeignKey(‘father.id‘))
Base.metadata.create_all(engine)
MySession = sessionmaker(bind=engine)
session = MySession()
ret = session.query(Father).filter_by(id=1).first()
print(ret.son) #多个结果[<__main__.Son object at 0x0000000003F192B0>, <__main__.Son object at 0x0000000003F19320>]
#需要循环取值
ret = session.query(Son).filter_by(id=1).first()
print(ret.father)#一个结果<__main__.Father object at 0x0000000003F196D8>
#直接取值
西游之路——python全栈——ORM之SQLAlchemy(3)外键与relationship的关系
标签:onclick 分享 inf lap 一个 目录 src 简化 必须