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()

  

posted on 2018-01-11 16:56  努力的活着_在人间  阅读(93)  评论(0)    收藏  举报

导航