sqlalchemy_外鍵連接表

import sqlalchemy
from sqlalchemy import create_engine #連接數據庫
from sqlalchemy.ext.declarative import declarative_base #orm基類
from sqlalchemy import Column,Integer,String,DATE,ForeignKey#Column列
from sqlalchemy.orm import sessionmaker,relationship
engine=create_engine("mysql+pymysql://root:[email protected]/wupeiqi",
                     encoding='utf-8',echo=False)#連接數據庫 echo=TRUE輸出執行過程

base=declarative_base()# 生成基類

class Student(base):
    __tablename__="student"
    id=Column(Integer,primary_key=True)
    name=Column(String(32),nullable=False)
    register_date=Column(DATE,nullable=False)
    def __repr__(self):
        return "<%s name:%s>"%(self.id,self.name)

class StudyRecord(base):
    __tablename__="study_record"
    id = Column(Integer, primary_key=True)
    day=Column(Integer,nullable=False)
    status=Column(String(32),nullable=False)
    stu_id=Column(Integer,ForeignKey('student.id')) #外鍵關聯到student的id
    #StudyRecord通過student字段查詢Student表裏所有數據  在內存裏建立relationship關係
    student=relationship("Student",backref="my_study_record")#允許你可以在student表裏通過my_study_record字段反查Studyrecord所有數據
    def __repr__(self):
        return "<%s day:%s status:%s>"%(self.student.name,self.day,self.status)
base.metadata.create_all(engine)#創建表

#連接mysql
Session_class = sessionmaker(bind=engine)  # 創建與數據庫的連接session class ,注意,這裏返回給session的是個class,不是實例
session = Session_class()  # 生成session實例 session會話 類似cursor
'''
#插入數據
s1=Student(name="kobe",register_date="2017-05-16")
s2=Student(name="jack",register_date="2017-04-16")
s3=Student(name="duncon",register_date="2017-06-16")
s4=Student(name="Allen",register_date="2017-07-16")

record_1=StudyRecord(day=1,status="YES",stu_id=1)
record_2=StudyRecord(day=2,status="NO",stu_id=1)
record_3=StudyRecord(day=3,status="YES",stu_id=1)
record_4=StudyRecord(day=1,status="YES",stu_id=2)

session.add_all([s1,s2,s3,s4,record_1,record_2,record_3,record_4])
session.commit()
'''
#外鍵查詢數據
stu_obj=session.query(Student).filter(Student.name=="kobe").first()
print(stu_obj.my_study_record)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章