时间:2021-07-01 10:21:17 帮助过:19人阅读
本片是以上一篇pymsql操作MySQL的补充,主要演示pymysql的外键操作使用
1、示意图
2、pymysql外键关联实例
from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, DATE, ForeignKey from sqlalchemy.orm import relationship, sessionmaker connect = create_engine("mysql+pymysql://root:123456@localhost:3306/test", encoding="utf-8", echo=False) # 连接数据库,echo=True =>把所有的信息都打印出来 Base = declarative_base() # 生成ORM基类 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 "<{0} name:{1}>".format(self.id, self.name) class StudentRecord(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表,然后我需要在study_record里通过student这个字段,就可以去查Student类里面所有的字段, # 反过来利用backref="my_study_record"中的my_study_record,在student表里通过my_study_record这个字段反查study_record类里面的所有字段, Student = relationship("Student", backref="my_study_record") def __repr__(self): return "<name:{0} day:{1} stu_id:{2}>".format(self.Student.name, self.day, self.stu_id) Base.metadata.create_all(connect) # 创建学生表和学生记录表,在第一次创建后注释 session_class = sessionmaker(connect) # 创建与数据库的会话session class ,这里返回给session的是个class,不是实例 session = session_class() # 生成session实例 #在两个表中插入数据 stu1 = Student(name="test", register_date="2017-05-30") stu2 = Student(name="test2", register_date="2017-06-30") record1 = StudentRecord(day=1, status="Y", stu_id=1) record2 = StudentRecord(day=2, status="Y", stu_id=1) session.add_all([record1, record2]) session.commit()
3、根据关联外键,查对应表中信息
stu_obj = session.query(Student).filter_by(name="test").first() print(stu_obj.my_study_record) # 在学生表里查学生对应的学习记录 record_obj = session.query(StudentRecord).first() print(record_obj.Student.name) # 在学生记录表里面查学习记录对应学生的名字 #输出 [<name:test day:1 stu_id:1>, <name:test day:2 stu_id:1>] test
【python】-- pymsql外键
标签:技术分享 mysql mysql外键 pytho 分享图片 python 创建 encoding alc