11ORM外键关联
from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Integer, ForeignKey, Column, String from sqlalchemy.orm import relationship,sessionmaker engine = create_engine('mysql+pymysql://cai:123@localhost/test?charset=utf8') Base = declarative_base() class Country(Base): __tablename__='country' id = Column(Integer, primary_key=True) name = Column(String(32), nullable=False, server_default='蜀国')#蜀国,吴国,魏国 soldier_number = Column(Integer) is_loyal = Column(String(1), server_default='F') def __repr__(self): return "(属国:%s,士兵人数:%d,han:%s)"%(self.name,self.soldier_number,'是' if self.is_loyal=='T'else '否') class Student(Base): __tablename__ = 'student' id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String(32), nullable=False, unique=True) age = Column(Integer) add_id = Column(Integer, ForeignKey(Country.id)) # 允许在country表里通过backref字段反向查询所有student表里的关联项目 country=relationship('Country',backref='student') def __repr__(self): return "(名字:%s,年龄:%d国家:%s)"%(self.name,self.age,self.country.name) Base.metadata.create_all(engine) session_class=sessionmaker(bind=engine) session=session_class() ''' c1=Country(name='蜀国',soldier_number=50,is_loyal='T') c2=Country(name='魏国',soldier_number=30,is_loyal='F') c3=Country(name='吴国',soldier_number=20,is_loyal='F') session.add(c1) session.add(c2) session.add(c3) session.commit() ''' #通过student实例直接访问country对象. #obj=session.query(Student).filter(Student.name=='zhangfei').first() #print(obj.country) #可以直接添加一个country绑定到当前对象 #obj.country=Country(name='魏国',soldier_number=20,is_loyal='F') #obj.country=Country(name='群英',soldier_number=2000,is_loyal='T') obj=session.query(Country).filter(Country.name=='蜀国').first() print(obj.student) session.commit()