#coding=utf-8
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String,DATE,ForeignKey
from sqlalchemy.orm import sessionmaker,relationship engine = create_engine("mysql+pymysql://root:123456@192.168.70.129/test1", #建立数据库连接
encoding='utf-8', echo=False) #打印echo信息
#写中文的方式
#engine = create_engine("mysql+pymysql://root:123456@192.168.70.129/test1?charser=utf8",
# encoding='utf-8', echo=False)
Base = declarative_base() # 生成orm基类 class Student(Base):
__tablename__ = 'student'
id = Column(Integer,primary_key =True )
name = Column(String(32),nullable= False)
update_time = 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')) #w外键创建完成
#study_obj = query(id= 1)
#student = query(Student).filter(Student.id == stu_obj.stu_id).first()
student = relationship('Student',backref = 'my_study_record') #StudyRecord可以通过调用Student。
# student中可以通过my_study_record查到StudyRecord里面的内容
def __repr__(self):
return '(%s name: %s)'%(self.id,self.day) Base.metadata.create_all(engine) Session_class = sessionmaker(bind=engine)
session = Session_class()
# s1 = Student(name = 'zq',update_time = '2018-01-01')
# s2 = Student(name = 'xiaohong',update_time = '2018-01-01')
# s3 = Student(name = 'xiaoming',update_time = '2018-01-01')
# s4 = Student(name = 'xiaohua',update_time = '2018-01-01')
# 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 = 'NO',stu_id =1 )
# study_obj4 = StudyRecord(day = 1,status = 'YES',stu_id =2)
#session.add_all([s1,s2,s3,s4,study_obj1,study_obj2,study_obj3,study_obj4]) #pyhton中不能同时创建,会出错
#第二个表的id不是从1开始得,为什么?
#session.add_all([s1,s2,s3,s4])
# session.add_all([study_obj1,study_obj2,study_obj3,study_obj4])
# session.commit()
stuobj = session.query(Student).filter(Student.name=='zq').first()
print stuobj.my_study_record

ORM外键关联的更多相关文章

  1. Python sqlalchemy orm 外键关联

    创建外键关联 并通过relationship 互相调用 如图: 实现代码: import sqlalchemy # 调用链接数据库 from sqlalchemy import create_engi ...

  2. Python sqlalchemy orm 多外键关联

     多外键关联 注:在两个表之间进行多外键链接 如图: 案例: # 创建两张表并添加外键主键 # 调用Column创建字段 加类型 from sqlalchemy import Integer, For ...

  3. Python sqlalchemy orm 多对多外键关联

    多对多外键关联 注:使用三张表进行对应关联 实现代码: # 创建3个表 配置外键关联 # 调用Column创建字段 加类型 from sqlalchemy import Table, Column, ...

  4. 基于EF的数据外键关联查询

    现在很多ORM不自带外键关联的实体查询,比如我查询用户,用时将关联的角色信息查询出来,那么就要进行2次查询,很麻烦.而我现在要做的就是基于EF的外键关联查询.很方便的. 首先,创建基础查询的BaseS ...

  5. Entity Framework - 基于外键关联的单向一对一关系

    代码的世界,原以为世界关系很简单,确道是关系无处不在.NET世界里ORM框架中EntityFramework作为其中翘楚,大大解放了搬砖工作的重复工作,着实提高了不少生产力,而也碰到过不少问题!比如关 ...

  6. Django(四) ORM 外键操作及初识Ajax

    一.内容回顾 1.Django请求的生命周期: ​ 路由系统 -> 视图函数(获取模板+数据 -> 渲染) -> 字符串返回给用户 2.路由系统: /index/ #-> 函数 ...

  7. pythonのsqlalchemy外键关联查询

    #!/usr/bin/env python import sqlalchemy from sqlalchemy import create_engine from sqlalchemy.ext.dec ...

  8. Hibernate,关系映射的多对一单向关联、多对一双向关联、一对一主键关联、一对一外键关联、多对多关系关联

    2018-11-10  22:27:02开始写 下图内容ORM.Hibernate介绍.hibername.cfg.xml结构: 下图内容hibernate映射文件结构介绍 下图内容hibernate ...

  9. sqlalchemy多外键关联

    一.前言 如果有张表A的多个字段关联另一张表B的一个字段,就如同一个客户表的账单地址和发货地址,同时关联地址表中的id字段. 二.事例 # -*- coding: UTF-8 -*- from sql ...

随机推荐

  1. python基础内置函数

    #取绝对值 #print(abs(-1)) #对序列中的元素进行bool运算,如果可迭代对象为空也返回True # print(all((1,23,))) # print(all({"nam ...

  2. bzoj4127 Abs 树链剖分+线段树+均摊分析

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4127 题解 首先区间绝对值和可以转化为 \(2\) 倍的区间正数和 \(-\) 区间和.于是问 ...

  3. 带你一文搞定 IO 流相关核心问题

    问:简单谈谈 Java IO 流各实现类的特性? 答:java.io 包下面的流基本都是装饰器模式的实现,提供了各种类型流操作的便携性,常见的流分类如下. 以二进制字节方式读写的流: InputStr ...

  4. 多线程、同步实现方法及Error和Exception的区别与联系

    多线程.同步实现方法? 实现线程有两种方法: 继承Thread类 实现Runnable接口 实现同步也有两种方法 一种是用同步方法:同步方法就是在方法返回类型后面加上synchronized, 比如: ...

  5. JS原型和原型链(3)

    构造函数创建对象: function Person() { } var person = new Person(); person.name = 'Kevin'; console.log(person ...

  6. LeetCode--053--最大子序和(java)

    给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 ...

  7. PHPcms编辑器如何粘贴带格式的word文档

    在之前在工作中遇到在富文本编辑器中粘贴图片不能展示的问题,于是各种网上扒拉,终于找到解决方案,在这里感谢一下知乎中众大神以及TheViper. 通过知乎提供的思路找到粘贴的原理,通过TheViper找 ...

  8. [CF959F]Mahmoud and Ehab and yet another xor task题解

    搞n个线性基,然后每次在上一次的基础上插入读入的数,前缀和线性基,或者说珂持久化线性基. 然后一个num数组记录当时线性基里有多少数 然后每次前缀操作一下就珂以了 代码 #include <cs ...

  9. 【Java】commons-lang3中DateUtils类方法介绍

    添加commons-lang3的Maven依赖 <dependency> <groupId>org.apache.commons</groupId> <art ...

  10. java单双引号转义问题

    JavaScript代码:var str = '<a href="javascript:;" onclick="visaDetail(\'1\',' + value ...