sqlalchemy多对多关系(三)

sqlalchemy 多对多关系创建

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.engine import create_engine
from sqlalchemy.orm import relationship

BaseModel = declarative_base()
engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/s21?charset=utf8")


class Girl(BaseModel):
    __tablename__ = "girl"
    id = Column(Integer, primary_key=True)
    name = Column(String(32), nullable=False)

    gyb = relationship("Boy", backref="byg", secondary="hotel")  # secondary="hotel" 数据表中的数据才能证明两者关系


class Boy(BaseModel):
    __tablename__ = "boy"
    id = Column(Integer, primary_key=True)
    name = Column(String(32), nullable=False)


class Hotel(BaseModel):
    __tablename__ = "hotel"
    id = Column(Integer, primary_key=True)
    bid = Column(Integer, ForeignKey("boy.id"))
    gid = Column(Integer, ForeignKey("girl.id"))


BaseModel.metadata.create_all(engine)

多对多关系的使用

from sqlalchemy.orm import sessionmaker
from sqlalchemy.engine import create_engine
engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/s21?charset=utf8")

select_db = sessionmaker(engine)
db_session = select_db()

# 增加数据 relationship 正向添加
g = Girl(name="赵丽颖", gyb=[Boy(name="DragonFire"), Boy(name="冯绍峰")])
db_session.add(g)

# 增加数据 relationship 反向添加
b = Boy(name="李杰")
b.byg = [
    Girl(name="罗玉凤"),
    Girl(name="朱利安"),
    Girl(name="乔碧萝")
]
#
db_session.add(b)
# db_session.commit()
# db_session.close()


# 查询 relationship 正向
res = db_session.query(Girl).all()
for g in res:
    print(g.name, len(g.gyb))

# 查询 relationship 反向
res = db_session.query(Boy).all()
for b in res:
    print(b.name, len(b.byg))

db_session.commit()
db_session.close()

版权声明:除特别注明外,本站所有文章均为王晨曦个人站点原创

转载请注明:出处来自王晨曦个人站点 » sqlalchemy多对多关系(三)

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注