码迷,mamicode.com
首页 > 数据库 > 详细

【python】-- pymsql外键

时间:2017-12-23 20:17:07      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:技术分享   mysql   mysql外键   pytho   分享图片   python   创建   encoding   alc   

 pymsql外键

本片是以上一篇pymsql操作MySQL的补充,主要演示pymysql的外键操作使用

 

1、外键关联

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   

原文地址:http://www.cnblogs.com/Keep-Ambition/p/8094151.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!