#-*-coding:utf-8-*-
#__author__ = "logan.xu" import sqlalchemy
from sqlalchemy import create_engine,func
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String,ForeignKey,DATE
from sqlalchemy.orm import sessionmaker,relationship engine=create_engine("mysql+pymysql://root:12345678@localhost/news",encoding='utf-8',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=relationship("Student",backref="my_study_record")
#
#def __repr__(self):
#return "<%s name:%s>" % (self.id,self.day)
   def __repr__(self):
   return "<%s day:%s status:%s>" % (self.id,self.day,self.status)
#---------------1.创建表-----------------# 

Base.metadata.create_all(engine)
#---------------------------------------#
Session_class = sessionmaker(bind=engine) Session = Session_class()

#---------------2.写入数据-----------------#

s1=Student(name='Alex',register_date="2019-01-09")
s2=Student(name='Jack',register_date="2019-01-09")
s3=Student(name='Rain',register_date="2019-01-10")
s4=Student(name='Eric',register_date="2019-01-11")
s5=Student(name='John',register_date="2019-01-12")

#

study_obj1=StudyRecord(day=1,status="Yes",stu_id=1)
study_obj2=StudyRecord(day=2,status="NO",stu_id=1)
study_obj3=StudyRecord(day=3,status="Yes",stu_id=1)
study_obj4=StudyRecord(day=1,status="NO",stu_id=2)
study_obj5=StudyRecord(day=1,status="NO",stu_id=2)

# ## 写入数据 并调用 study_record字段插入数据 为 Student数据

Session.add_all([s1,s2,s3,s4,s5,study_obj1,study_obj2,study_obj3,study_obj4,study_obj5])

#---------------------------------------#

#---------------3.查询数据-----------------#

# 取出student内的 内存对象
stu_obj = Session.query(Student).filter(Student.name=="Alex").first()

print(stu_obj.my_study_record)

#---------------------------------------#

# 执行事务 Session.commit()
/Users/drizzle/PycharmProjects/2018-12-03/venv/bin/python /Users/drizzle/PycharmProjects/2018-12-03/orm_fk.py
2019-01-08 18:30:00,061 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'sql_mode'
2019-01-08 18:30:00,061 INFO sqlalchemy.engine.base.Engine {}
2019-01-08 18:30:00,063 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'lower_case_table_names'
2019-01-08 18:30:00,063 INFO sqlalchemy.engine.base.Engine {}
2019-01-08 18:30:00,065 INFO sqlalchemy.engine.base.Engine SELECT DATABASE()
2019-01-08 18:30:00,065 INFO sqlalchemy.engine.base.Engine {}
2019-01-08 18:30:00,066 INFO sqlalchemy.engine.base.Engine show collation where `Charset` = 'utf8mb4' and `Collation` = 'utf8mb4_bin'
2019-01-08 18:30:00,066 INFO sqlalchemy.engine.base.Engine {}
2019-01-08 18:30:00,069 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS CHAR(60)) AS anon_1
2019-01-08 18:30:00,069 INFO sqlalchemy.engine.base.Engine {}
2019-01-08 18:30:00,069 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS CHAR(60)) AS anon_1
2019-01-08 18:30:00,069 INFO sqlalchemy.engine.base.Engine {}
2019-01-08 18:30:00,070 INFO sqlalchemy.engine.base.Engine SELECT CAST('test collated returns' AS CHAR CHARACTER SET utf8mb4)
COLLATE utf8mb4_bin AS anon_1
2019-01-08 18:30:00,070 INFO sqlalchemy.engine.base.Engine {}
2019-01-08 18:30:00,071 INFO sqlalchemy.engine.base.Engine DESCRIBE `student`
2019-01-08 18:30:00,071 INFO sqlalchemy.engine.base.Engine {}
2019-01-08 18:30:00,073 INFO sqlalchemy.engine.base.Engine DESCRIBE `study_record`
2019-01-08 18:30:00,073 INFO sqlalchemy.engine.base.Engine {}
2019-01-08 18:30:00,080 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2019-01-08 18:30:00,081 INFO sqlalchemy.engine.base.Engine INSERT INTO student (name, register_date) VALUES (%(name)s, %(register_date)s)
2019-01-08 18:30:00,081 INFO sqlalchemy.engine.base.Engine {'name': 'Alex', 'register_date': '2019-01-09'}
2019-01-08 18:30:00,082 INFO sqlalchemy.engine.base.Engine INSERT INTO student (name, register_date) VALUES (%(name)s, %(register_date)s)
2019-01-08 18:30:00,082 INFO sqlalchemy.engine.base.Engine {'name': 'Jack', 'register_date': '2019-01-09'}
2019-01-08 18:30:00,082 INFO sqlalchemy.engine.base.Engine INSERT INTO student (name, register_date) VALUES (%(name)s, %(register_date)s)
2019-01-08 18:30:00,082 INFO sqlalchemy.engine.base.Engine {'name': 'Rain', 'register_date': '2019-01-10'}
2019-01-08 18:30:00,083 INFO sqlalchemy.engine.base.Engine INSERT INTO student (name, register_date) VALUES (%(name)s, %(register_date)s)
2019-01-08 18:30:00,083 INFO sqlalchemy.engine.base.Engine {'name': 'Eric', 'register_date': '2019-01-11'}
2019-01-08 18:30:00,083 INFO sqlalchemy.engine.base.Engine INSERT INTO student (name, register_date) VALUES (%(name)s, %(register_date)s)
2019-01-08 18:30:00,083 INFO sqlalchemy.engine.base.Engine {'name': 'John', 'register_date': '2019-01-12'}
2019-01-08 18:30:00,084 INFO sqlalchemy.engine.base.Engine INSERT INTO study_record (day, status, stu_id) VALUES (%(day)s, %(status)s, %(stu_id)s)
2019-01-08 18:30:00,084 INFO sqlalchemy.engine.base.Engine {'day': 1, 'status': 'Yes', 'stu_id': 1}
2019-01-08 18:30:00,085 INFO sqlalchemy.engine.base.Engine INSERT INTO study_record (day, status, stu_id) VALUES (%(day)s, %(status)s, %(stu_id)s)
2019-01-08 18:30:00,085 INFO sqlalchemy.engine.base.Engine {'day': 2, 'status': 'NO', 'stu_id': 1}
2019-01-08 18:30:00,085 INFO sqlalchemy.engine.base.Engine INSERT INTO study_record (day, status, stu_id) VALUES (%(day)s, %(status)s, %(stu_id)s)
2019-01-08 18:30:00,085 INFO sqlalchemy.engine.base.Engine {'day': 3, 'status': 'Yes', 'stu_id': 1}
2019-01-08 18:30:00,086 INFO sqlalchemy.engine.base.Engine INSERT INTO study_record (day, status, stu_id) VALUES (%(day)s, %(status)s, %(stu_id)s)
2019-01-08 18:30:00,086 INFO sqlalchemy.engine.base.Engine {'day': 1, 'status': 'NO', 'stu_id': 2}
2019-01-08 18:30:00,086 INFO sqlalchemy.engine.base.Engine INSERT INTO study_record (day, status, stu_id) VALUES (%(day)s, %(status)s, %(stu_id)s)
2019-01-08 18:30:00,086 INFO sqlalchemy.engine.base.Engine {'day': 1, 'status': 'NO', 'stu_id': 2}
2019-01-08 18:30:00,088 INFO sqlalchemy.engine.base.Engine SELECT student.id AS student_id, student.name AS student_name, student.register_date
AS student_register_date
FROM student
WHERE student.name = %(name_1)s
LIMIT %(param_1)s
2019-01-08 18:30:00,088 INFO sqlalchemy.engine.base.Engine {'name_1': 'Alex', 'param_1': 1}
2019-01-08 18:30:00,090 INFO sqlalchemy.engine.base.Engine SELECT study_record.id AS study_record_id, study_record.day AS study_record_day,
study_record.status AS study_record_status, study_record.stu_id AS study_record_stu_id
FROM study_record
WHERE %(param_1)s = study_record.stu_id
2019-01-08 18:30:00,090 INFO sqlalchemy.engine.base.Engine {'param_1': 1}
[<2 day:1 status:Yes>, <3 day:2 status:NO>, <4 day:3 status:Yes>, <7 day:1 status:Yes>, <8 day:2 status:NO>, <9 day:3 status:Yes>,
<12 day:1 status:Yes>, <13 day:2 status:NO>, <14 day:3 status:Yes>]
2019-01-08 18:30:00,091 INFO sqlalchemy.engine.base.Engine COMMIT Process finished with exit code 0
可以在study_record 反查student表信息

#-*-coding:utf-8-*-
#__author__ = "logan.xu" import sqlalchemy
from sqlalchemy import create_engine,func
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String,ForeignKey,DATE
from sqlalchemy.orm import sessionmaker,relationship engine=create_engine("mysql+pymysql://root:12345678@localhost/news",encoding='utf-8',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=relationship("Student",backref="my_study_record")
#
def __repr__(self):
return "<%s day:%s status:%s>" % (self.student.name,self.day,self.status) #---------------1.创建表-----------------# Base.metadata.create_all(engine)
#---------------------------------------# Session_class = sessionmaker(bind=engine)
Session = Session_class() #---------------2.写入数据-----------------# s1=Student(name='Alex',register_date="2019-01-09")
s2=Student(name='Jack',register_date="2019-01-09")
s3=Student(name='Rain',register_date="2019-01-10")
s4=Student(name='Eric',register_date="2019-01-11")
s5=Student(name='John',register_date="2019-01-12")
#
study_obj1=StudyRecord(day=1,status="Yes",stu_id=1)
study_obj2=StudyRecord(day=2,status="NO",stu_id=1)
study_obj3=StudyRecord(day=3,status="Yes",stu_id=1)
study_obj4=StudyRecord(day=1,status="NO",stu_id=2)
study_obj5=StudyRecord(day=1,status="NO",stu_id=2)
# ## 写入数据 并调用 study_record字段插入数据 为 Student数据
Session.add_all([s1,s2,s3,s4,s5,study_obj1,study_obj2,study_obj3,study_obj4,study_obj5]) #---------------------------------------# #---------------3.查询数据-----------------# # 取出student内的 内存对象
stu_obj = Session.query(Student).filter(Student.name=="Alex").first()
print(stu_obj.my_study_record) #---------------------------------------# # 执行事务
Session.commit()
/Users/drizzle/PycharmProjects/2018-12-03/venv/bin/python /Users/drizzle/PycharmProjects/2018-12-03/orm_fk.py
2019-01-08 18:35:46,521 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'sql_mode'
2019-01-08 18:35:46,522 INFO sqlalchemy.engine.base.Engine {}
2019-01-08 18:35:46,523 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'lower_case_table_names'
2019-01-08 18:35:46,523 INFO sqlalchemy.engine.base.Engine {}
2019-01-08 18:35:46,525 INFO sqlalchemy.engine.base.Engine SELECT DATABASE()
2019-01-08 18:35:46,525 INFO sqlalchemy.engine.base.Engine {}
2019-01-08 18:35:46,526 INFO sqlalchemy.engine.base.Engine show collation where `Charset` = 'utf8mb4' and `Collation` = 'utf8mb4_bin'
2019-01-08 18:35:46,526 INFO sqlalchemy.engine.base.Engine {}
2019-01-08 18:35:46,529 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS CHAR(60)) AS anon_1
2019-01-08 18:35:46,529 INFO sqlalchemy.engine.base.Engine {}
2019-01-08 18:35:46,529 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS CHAR(60)) AS anon_1
2019-01-08 18:35:46,530 INFO sqlalchemy.engine.base.Engine {}
2019-01-08 18:35:46,530 INFO sqlalchemy.engine.base.Engine SELECT CAST('test collated returns' AS CHAR CHARACTER SET utf8mb4)
COLLATE utf8mb4_bin AS anon_1
2019-01-08 18:35:46,530 INFO sqlalchemy.engine.base.Engine {}
2019-01-08 18:35:46,531 INFO sqlalchemy.engine.base.Engine DESCRIBE `student`
2019-01-08 18:35:46,531 INFO sqlalchemy.engine.base.Engine {}
2019-01-08 18:35:46,533 INFO sqlalchemy.engine.base.Engine DESCRIBE `study_record`
2019-01-08 18:35:46,533 INFO sqlalchemy.engine.base.Engine {}
2019-01-08 18:35:46,541 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2019-01-08 18:35:46,542 INFO sqlalchemy.engine.base.Engine INSERT INTO student (name, register_date) VALUES (%(name)s, %(register_date)s)
2019-01-08 18:35:46,542 INFO sqlalchemy.engine.base.Engine {'name': 'Alex', 'register_date': '2019-01-09'}
2019-01-08 18:35:46,543 INFO sqlalchemy.engine.base.Engine INSERT INTO student (name, register_date) VALUES (%(name)s, %(register_date)s)
2019-01-08 18:35:46,543 INFO sqlalchemy.engine.base.Engine {'name': 'Jack', 'register_date': '2019-01-09'}
2019-01-08 18:35:46,544 INFO sqlalchemy.engine.base.Engine INSERT INTO student (name, register_date) VALUES (%(name)s, %(register_date)s)
2019-01-08 18:35:46,544 INFO sqlalchemy.engine.base.Engine {'name': 'Rain', 'register_date': '2019-01-10'}
2019-01-08 18:35:46,544 INFO sqlalchemy.engine.base.Engine INSERT INTO student (name, register_date) VALUES (%(name)s, %(register_date)s)
2019-01-08 18:35:46,544 INFO sqlalchemy.engine.base.Engine {'name': 'Eric', 'register_date': '2019-01-11'}
2019-01-08 18:35:46,545 INFO sqlalchemy.engine.base.Engine INSERT INTO student (name, register_date) VALUES (%(name)s, %(register_date)s)
2019-01-08 18:35:46,545 INFO sqlalchemy.engine.base.Engine {'name': 'John', 'register_date': '2019-01-12'}
2019-01-08 18:35:46,546 INFO sqlalchemy.engine.base.Engine INSERT INTO study_record (day, status, stu_id) VALUES (%(day)s, %(status)s, %(stu_id)s)
2019-01-08 18:35:46,546 INFO sqlalchemy.engine.base.Engine {'day': 1, 'status': 'Yes', 'stu_id': 1}
2019-01-08 18:35:46,547 INFO sqlalchemy.engine.base.Engine INSERT INTO study_record (day, status, stu_id) VALUES (%(day)s, %(status)s, %(stu_id)s)
2019-01-08 18:35:46,547 INFO sqlalchemy.engine.base.Engine {'day': 2, 'status': 'NO', 'stu_id': 1}
2019-01-08 18:35:46,547 INFO sqlalchemy.engine.base.Engine INSERT INTO study_record (day, status, stu_id) VALUES (%(day)s, %(status)s, %(stu_id)s)
2019-01-08 18:35:46,547 INFO sqlalchemy.engine.base.Engine {'day': 3, 'status': 'Yes', 'stu_id': 1}
2019-01-08 18:35:46,548 INFO sqlalchemy.engine.base.Engine INSERT INTO study_record (day, status, stu_id) VALUES (%(day)s, %(status)s, %(stu_id)s)
2019-01-08 18:35:46,548 INFO sqlalchemy.engine.base.Engine {'day': 1, 'status': 'NO', 'stu_id': 2}
2019-01-08 18:35:46,548 INFO sqlalchemy.engine.base.Engine INSERT INTO study_record (day, status, stu_id) VALUES (%(day)s, %(status)s, %(stu_id)s)
2019-01-08 18:35:46,548 INFO sqlalchemy.engine.base.Engine {'day': 1, 'status': 'NO', 'stu_id': 2}
2019-01-08 18:35:46,550 INFO sqlalchemy.engine.base.Engine SELECT student.id AS student_id, student.name AS student_name, student.register_date AS student_register_date
FROM student
WHERE student.name = %(name_1)s
LIMIT %(param_1)s
2019-01-08 18:35:46,550 INFO sqlalchemy.engine.base.Engine {'name_1': 'Alex', 'param_1': 1}
2019-01-08 18:35:46,552 INFO sqlalchemy.engine.base.Engine SELECT study_record.id AS study_record_id, study_record.day AS study_record_day,
study_record.status AS study_record_status, study_record.stu_id AS study_record_stu_id
FROM study_record
WHERE %(param_1)s = study_record.stu_id
2019-01-08 18:35:46,552 INFO sqlalchemy.engine.base.Engine {'param_1': 1}
[<Alex day:1 status:Yes>, <Alex day:2 status:NO>, <Alex day:3 status:Yes>, <Alex day:1 status:Yes>, <Alex day:2 status:NO>,
<Alex day:3 status:Yes>, <Alex day:1 status:Yes>, <Alex day:2 status:NO>, <Alex day:3 status:Yes>, <Alex day:1 status:Yes>,
<Alex day:2 status:NO>, <Alex day:3 status:Yes>]
2019-01-08 18:35:46,553 INFO sqlalchemy.engine.base.Engine COMMIT Process finished with exit code 0

Python3-sqlalchemy-orm 创建关联表带外键并查询数据的更多相关文章

  1. Python3-sqlalchemy-orm 创建关联表带外键并插入数据

    #-*-coding:utf-8-*- #__author__ = "logan.xu" import sqlalchemy from sqlalchemy import crea ...

  2. Python3-sqlalchemy-orm 创建多表关联表带外键

    #-*-coding:utf-8-*- #__author__ = "logan.xu" import sqlalchemy from sqlalchemy import crea ...

  3. 《Entity Framework 6 Recipes》中文翻译系列 (37) ------ 第六章 继承与建模高级应用之独立关联与外键关联

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 6-13  在基类中应用条件 问题 你想从一个已存在的模型中的实体派生一个新的实体, ...

  4. 数据库的SQL语句创建和主外键删除操作

    create table UserType ( Id ,), Name nvarchar() not null ) go create table UserInfo ( Id ,), LoginPwd ...

  5. mysql数据库:分表、多表关联、外键约束、级联操作

    一.分表.外键.级联.多对一 二.多对多 三.一对一 一.分表.外键.级联.多对一 将部门数据与员工数据放到同一张表中会造成 数据重复 结构混乱 扩展维护性差 需要分表 create table de ...

  6. 003--PowerDesigner创建索引与外键

    PowerDesigner创建索引与外键 一.创建索引 双击Table->Columns->创建索引 Step1:双击Table Step2:选择Columns->创建索引 弹出如下 ...

  7. SQLSERVER清空(Truncate)被外键引用的数据表

    前言:我们知道SQLSERVER清空数据表有两种方式Delete和Truncate,当然两者的不同大家也都知道(不清楚的可以MSDN).不过这个错误“Cannot truncate table  be ...

  8. Django ORM - 001 - 外键表查询主表信息

    开始用Django做web开发,我想大家都会遇到同样的问题,那就是如何高效快速的查询需要的数据,MVC都很简单,但是ORM折腾起来就有些费时间,我准备好好研究下Django ORM,所以会有一个系列的 ...

  9. 使用Navicat V8.0创建数据库,外键出现错误ERROR 1005: Can’t create table (errno: 121)

    ERROR 1005: Can't create table (errno: 121) errno 121 means a duplicate key error. Probably the tabl ...

随机推荐

  1. SpringBoot之yaml语法及静态资源访问

    配置文件-yaml 在spring Boot开发中推荐使用yaml来作为配置文件. 基本语法: key: value:kv之间有空格 大小写敏感 使用缩进表示层级关系 缩进不允许使用tab,只允许空格 ...

  2. 通过Xlib枚举指定进程下所有窗体

    在windows系统下如果想要枚举指定进程的窗体,我们可以通过EnumWindows加上自己实现的回调函数进行实现,那么在linux下该如何做呢? 其实也很简单,在linux下,我们可以通过xlib中 ...

  3. php cookie赋值使用

    setcookie('username',$user,time()+3600*24);    //cookie赋值 public function login(){ //cookie 使用       ...

  4. 自学linux——9.Linux的权限概述

    Linux的权限概述 一.      权限概述 1.权限介绍 在多用户(可以不同时)计算机系统的管理中,权限是指某个特定的用户具有特定的系统资源使用权力,像是文件夹.特定系统指令的使用或存储量的限制 ...

  5. DevOps基础的认识与工具实践

    什么是DevOps DevOps 强调的是高效组织团队之间如何通过自动化的工具协作和沟通来完成软件的生命周期管理,从而更快.更频繁地交付更稳定的软件 Devops 包含了敏捷开发,测试,运维 DevO ...

  6. UE4点选源码分析

    在UE插件开发中,时常会用到场景预览窗口的功能,也经常会有点选场景里的物体而同步改变工具界面的需求,网上教程多为讲解如何打开一个预览界面.在最近的一次需求开发中,我粗读了关卡编辑器和蓝图编辑器的Vie ...

  7. OpenGL学习笔记(六)坐标系统

    目录 一.衔接 二.概述 三.各个坐标系统 局部空间 世界空间 观察空间 裁剪空间 四.两种投影矩阵 正射投影 透视投影 五.把它们都组合到一起 六.编码实现 1. 实现卡片旋转 2. 实现正方体旋转 ...

  8. 关于c++ STL map 和 unordered_map 的效率的对比测试

    本文采用在随机读取和插入的情况下测试map和unordered_map的效率 笔者的电脑是台渣机,现给出配置信息 处理器 : Intel Pentium(R) CPU G850 @ 2.90GHz × ...

  9. Redis-缓存穿透/击穿/雪崩

    1. 简介 如图所示,一个正常的请求 客户端请求张铁牛的博客. 服务首先会请求redis,查看请求的内容是否存在. redis将请求结果返回给服务,如果返回的结果有数据则执行7:如果没有数据则会继续往 ...

  10. 目录已存在导致Jenkins项目构建失败的解决方法

    Jenkins中的项目在下载源代码时,如果Working Directory中存在未加入版本控制的文件或者目录已经存在于SVN库中,会导致更新失败,整个构建终止,解决方法是将SVN的检出策略由&quo ...