1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| from sqlalchemy import String, Integer, Column, ForeignKey, create_engine from sqlalchemy.orm import relationship, declarative_base, create_session
Base = declarative_base()
class Home(Base): __tablename__ = 'home' __mapper_args__ = {'confirm_deleted_rows': False} id = Column(Integer, primary_key=True) boy_id = Column(Integer, ForeignKey("boy.id")) girl_id = Column(Integer, ForeignKey("girl.id")) home_name = Column(String(10)) boy = relationship("Boy", back_populates="homes") girl = relationship("Girl", back_populates="homes")
class Girl(Base): __tablename__ = 'girl' id = Column(Integer, primary_key=True) name = Column(String(15), nullable=False) homes = relationship('Home', back_populates='girl', cascade="all, delete-orphan") boys = relationship('Boy', secondary='home', back_populates='girls', overlaps='boy,girl,homes')
class Boy(Base): __tablename__ = 'boy' id = Column(Integer, primary_key=True) name = Column(String(15), nullable=False) homes = relationship('Home', back_populates='boy', cascade="all, delete-orphan") girls = relationship('Girl', secondary='home', back_populates='boys', overlaps='boy,girl,homes')
engine = create_engine("sqlite:///test.db", echo=True) Base.metadata.drop_all(engine) Base.metadata.create_all(engine) session = create_session(bind=engine, autocommit=False, autoflush=True)
g = Girl(name='mei') g.boys = [Boy(name='jason'), Boy(name='jack')] session.add(g) session.commit()
b = Boy(name='jie') b.girls = [Girl(name='ran'), Girl(name='meng')] session.add(b) session.commit()
aaa = Boy(name='aaa') bbb = Girl(name='bbb') abhome = Home(boy=aaa, girl=bbb, home_name='sweet home') session.add(abhome) session.commit()
girl = session.query(Girl).filter(Girl.id == 1).first() print(f"{girl.name} 的男朋友:{[b.name for b in girl.boys]}")
session.delete(girl) session.commit()
session.close()
|