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
| import datetime from sqlalchemy import and_, Column, DateTime, JSON, Integer, String, ForeignKey, create_engine from sqlalchemy.orm import declarative_base, relationship, create_session
class Base(object): created_at = Column(DateTime, default=datetime.datetime.now, nullable=False) updated_at = Column(DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, nullable=False)
DeclarativeBase = declarative_base(cls=Base)
class Class(DeclarativeBase): __tablename__ = 'Class' id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String) data = Column(JSON) student_ = relationship('Student', back_populates='class_')
class Student(DeclarativeBase): __tablename__ = 'Student' id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String) class_id = Column(Integer, ForeignKey("Class.id", ondelete='CASCADE'), nullable=True, index=True) class_ = relationship(Class, back_populates='student_') test = relationship('Test', back_populates='student_')
class Test(DeclarativeBase): __tablename__ = 'Test' id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String) student_id = Column(Integer, ForeignKey("Student.id", ondelete='CASCADE'), nullable=True, index=True) student_ = relationship(Student, back_populates='test')
engine = create_engine('sqlite:///test2.db', echo=False) DeclarativeBase.metadata.create_all(engine) session = create_session(bind=engine, autocommit=False, autoflush=True)
c = Class(name='高一1班', data={'age': 15}) st = Student(name='黎明', class_=c) st2 = Student(name='学友', class_=c) t = Test(name='期中考试', student_=st2)
session.add_all([c, st, st2, t]) session.commit()
student = session.query(Student).filter(Student.id == 1).first() print(f"学生所在班级:{student.class_.name}")
class_obj = session.query(Class).filter(Class.id == 1).first() print(f"班级学生数量:{len(class_obj.student_)}") for s in class_obj.student_: print(f" - {s.name}")
session.close()
|