python SQLAchemy外键关联
join
1、利用filter
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String from sqlalchemy.orm import sessionmaker
from sqlalchemy import func
# 连接方式 mysql+pymysql 用户名 root 密码 123456 主机 localhost 库 testdb encoding 字符集
engine = create_engine("mysql+pymysql://root:123456@localhost/testdb",encoding='utf-8', echo=True) Base = declarative_base() # 生成orm基类 class User(Base):
__tablename__ = 'user' # 表名
id = Column(Integer, primary_key=True)
name = Column(String(32))
password = Column(String(64)) def __repr__(self):
return "<%s name:%s>" % (self.id,self.name) class Student(Base):
__tablename__ = 'student' # 表名
id = Column(Integer,primary_key=True)
name = Column(String(32),nullable=False)
register_data = Column(DATE,nullable=False)
gender=Column(String(32),nullable=False) def __repr__(self):
return "<%s name:%s>" % (self.id,self.name) Base.metadata.create_all(engine) # 创建表结构 Session_class = sessionmaker(bind=engine) # 创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
Session = Session_class() # 生成session实例 cursor
print(Session.query(User,Student).filter(User.id==Student.id).all())
2 、join
这个要求A表和B表必须有FOREIGN KEY的关系才可以。
Session.query(User).join(Student).all()
Session.query(User).join(Student,isouter=True).all()
ORM实现外键约束

用户表、课程表、用户与课程中间表
1、首先把用户和用户中间表管理起来
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String,ForeignKey,DATE
from sqlalchemy.orm import sessionmaker
from sqlalchemy import func
# 连接方式 mysql+pymysql 用户名 root 密码 123456 主机 localhost 库 testdb encoding 字符集
engine = create_engine("mysql+pymysql://root:@localhost/test",encoding='utf-8', 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 "<%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')) def __repr__(self):
return "<%s name:%s>" % (self.id,self.day) Base.metadata.create_all(engine) # 创建表结构
以上先创建两张表

2、添加学员
Session_class = sessionmaker(bind=engine)
Session = Session_class() # 生成session实例 cursor s1 = Student(name='Alex',register_date='2017-10-24')
s2 = Student(name='jack',register_date='2017-10-24')
s3 = Student(name='rain',register_date='2017-10-24')
s4 = Student(name='Lily',register_date='2017-10-24')
s5 = Student(name='Lucy',register_date='2017-10-24') study_obj1 = StudyRecord(day=1,status='yes',stu_id=1)
study_obj2 = StudyRecord(day=2,status='yes',stu_id=1)
study_obj3 = StudyRecord(day=3,status='yes',stu_id=1)
study_obj4 = StudyRecord(day=1,status='yes',stu_id=2)
study_obj5 = StudyRecord(day=2,status='yes',stu_id=2) Session.add_all([s1,s2,s3,s4,s5,study_obj1,study_obj2,study_obj3,study_obj4,study_obj5]) Session.commit() # 现此才统一提交,创建数据
3、 查询
先看一个比较牛的东西:反查。通过设置的一个字段反向查询关联的表。关联表也可以根据这个字段查询当前表。双向反查。
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_classes') #指定关联的表 Student, backref
def __repr__(self):
return "<%s day:%s status:%s>" % (self.student.name,self.day,self.status)
Base.metadata.create_all(engine) # 创建表结构 Session_class = sessionmaker(bind=engine)
Session = Session_class() # 生成session实例 cursor
Stu_obj = Session.query(Student).filter(Student.name=='alex').first()
print(Stu_obj.my_classes)

首先 stu_id为ForeignKey,relationship()函数将告知ORM通过StudyRecord.student 关联到类Student。会使用两个表的外键约束来判定这种链接的性质。backref提供一种反向的查询。relationship()Student通过 .my_classes反向查询到StudyRecord。 Student

python SQLAchemy外键关联的更多相关文章
- pythonのsqlalchemy外键关联查询
#!/usr/bin/env python import sqlalchemy from sqlalchemy import create_engine from sqlalchemy.ext.dec ...
- 【Python】django模型models的外键关联使用
Python 2.7.10,django 1.8.6 外键关联:http://www.bubuko.com/infodetail-618303.html 字段属性:http://www.cnblogs ...
- Python sqlalchemy orm 多对多外键关联
多对多外键关联 注:使用三张表进行对应关联 实现代码: # 创建3个表 配置外键关联 # 调用Column创建字段 加类型 from sqlalchemy import Table, Column, ...
- Python sqlalchemy orm 外键关联
创建外键关联 并通过relationship 互相调用 如图: 实现代码: import sqlalchemy # 调用链接数据库 from sqlalchemy import create_engi ...
- Python sqlalchemy orm 多外键关联
多外键关联 注:在两个表之间进行多外键链接 如图: 案例: # 创建两张表并添加外键主键 # 调用Column创建字段 加类型 from sqlalchemy import Integer, For ...
- 《Entity Framework 6 Recipes》中文翻译系列 (29) ------ 第五章 加载实体和导航属性之过滤预先加载的实体集合和修改外键关联
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-13 过滤预先加载的实体集合 问题 你想过滤预先加载的实体集合,另外,你想使用 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (37) ------ 第六章 继承与建模高级应用之独立关联与外键关联
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 6-13 在基类中应用条件 问题 你想从一个已存在的模型中的实体派生一个新的实体, ...
- Entity Framework Code First添加修改及删除外键关联实体
1.添加外键关联实体 1>.添加新的Province及City实体 using (var ctx = new PortalContext()) { var city1 = new City { ...
- Hibernate5.2之一对一外键关联(五)
Hibernate5.2之一对一外键关联(五) 一.简介 上篇文章中笔者介绍了Hibernate关联关 ...
随机推荐
- JavaSwing概述
GUI(Graphic User Interface)为程序提供图形界面,它最初的设计目的是构建一个通用的GUI,使其能在所有平台上运行.在Java1.0中基础类AWT(Abstract Window ...
- x86/x64/AnyCPU之间的区别
原文链接 http://blog.csdn.net/lordwish/article/details/52312015 x86操作系统 目标平台 程序类型 运行结果 x86 应用程序exe 在32位C ...
- Java中的RSA加解密工具类:RSAUtils
本人手写已测试,大家可以参考使用 package com.mirana.frame.utils.encrypt; import com.mirana.frame.utils.log.LogUtils; ...
- echart使用设置一个柱形的最小宽度
因为echart的横坐标的个数不同会影响柱形图的宽度 如果只有三个月的就会是这样的 这样一来效果就不是很好,所以想做成如下效果 思路: 只是需要向xDate的值设置成想要的长度,如上图就是设置12,如 ...
- c++ 网络编程(八) LINUX-epoll/windows-IOCP下 socket opoll函数用法 优于select方法的epoll 以及windows下IOCP 解决多进程服务端创建进程资源浪费问题
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9622548.html 锲子:关于并发服务器中的I/O复用实现方式,前面在网络编程系列四还是五来 ...
- STM32F407 使用HAL库延时微妙实现方法(附CubeMX配置过程)
STM32F407 使用HAL库延时微妙实现方法(STM32CubeMX配置) 作者 : 李剀出处 : https://www.cnblogs.com/kevin-nancy/p/10696681.h ...
- Jquery jqXHR对象的属性和方法
在 jQuery 1.4 之前(包括1.4),$.ajax() 方法返回的是浏览器原生的 XMLHttpRequest 对象. 从 jQuery 1.5 开始,$.ajax() 方法返回 jQuery ...
- C 标准库 - string.h之strlen使用
strlen Returns the length of the C string str. The length of a C string is determined by the termina ...
- 【c++】类管理指针成员
c++编程提倡使用标准库,一个原因是标准库大胆减少对指针的使用.但是许多程序是离不开指针的.包含指针的类需要特别注意复制控制,原因是复制指针时只复制指针中的地址,而不复制指针所指向的对象.这样当把一个 ...
- Django settings.py添加静态文件夹
我们需要一个静态文件夹来存放文件,例如jQuery的模块 <script src="statics/jquery-3.2.1.js"></script> 引 ...