创建外键关联 并通过relationship 互相调用

如图:

实现代码:

import sqlalchemy

# 调用链接数据库
from sqlalchemy import create_engine
# 调用基类Base
from sqlalchemy.ext.declarative import declarative_base
# 调用Column创建字段 加类型
from sqlalchemy import Column, Integer, String,DATE,ForeignKey
# 调用操作链接,反查
from sqlalchemy.orm import sessionmaker,relationship # create_engine 链接数据库 mysql+pymysql:链接对象//用户名:密码@主机/DB
# encoding='utf-8' 链接字符集 ,echo=True 把所有信息打印出来
engine = create_engine("mysql+pymysql://root:123456@192.168.1.154/xiang",encoding='utf-8',
#echo=True
) # 生成orm基类
Base = declarative_base() class Student(Base):
__tablename__ = "student" # 设置id为主键
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为主键
id = Column(Integer,primary_key=True)
day = Column(Integer,nullable=False)
status = Column(String(32),nullable=False) # 将student表的id字段 设置为外键
stu_id = Column(Integer,ForeignKey("student.id")) # -允许你在Student表里通过backref字段反向查出所有它在表里的关联项-
# study_record表 通过student字段查找Student表内所有字段
# student表 通过my_study_record来访问study_record表内字段
# 注:relationship是orm自己通过在内存中类对象关联实现。
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)
#---------------------------------------# # bind=engine 绑定engine socket实例
Session_class = sessionmaker(bind=engine) # 生成session实例,如同pymysql内的cursor
Session = Session_class() #---------------2.插入数据-----------------# # Student 创建插入数据
# s1 = Student(name="kevin",register_date="2014-05-21")
# s2 = Student(name="Jack",register_date="2014-05-22")
# s3 = Student(name="Rain",register_date="2014-05-23")
# s4 = Student(name="Eric",register_date="2014-05-24") # StudyRecord 创建插入数据
# 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="YES",stu_id=2) # 批量插入字段数据
# Session.add_all([s1,s2,s3,s4,study_obj1,study_obj2,study_obj3,study_obj4,])
#---------------------------------------# #---------------3.查看数据-----------------#
# 指定查看"kevin"学员
stu_obj = Session.query(Student).filter(Student.name=="kevin").first()
print(stu_obj.my_study_record)
#---------------------------------------# # 执行事务
Session.commit()

Python sqlalchemy orm 外键关联的更多相关文章

  1. sqlalchemy多外键关联

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

  2. python SQLAchemy多外键关联

    关联同一张表的两个字段 Customer表有2个字段都关联了Address表 创建表结构 orm_many_fk.py 只创建表结构 from sqlalchemy import Integer, F ...

  3. sqlalchemy操作----外键关联,relationship

    ... #!_*_coding:utf-8_*_ #__author__:"Alex huang" import sqlalchemy from sqlalchemy import ...

  4. ORM外键关联

    #coding=utf-8 from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarativ ...

  5. Python - Django - ORM 外键操作

    models.py: from django.db import models # 出版社 class Publisher(models.Model): id = models.AutoField(p ...

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

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

  7. Python sqlalchemy orm 多外键关联

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

  8. pythonのsqlalchemy外键关联查询

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

  9. sqlalchemy外键关联

    一.创建两张表,并关联外键 导入ForenginKey模块 # -*- coding: UTF-8 -*- from sqlalchemy import create_engine from sqla ...

随机推荐

  1. IntelliJ IDEA 2018.3.2无法正常输入字符问题解决方案

    昨天升级IDEA的版本到2018.3.2,今天打开项目发现只要在代码编辑器输入字符(英文.符号或中文等)都会立刻被强制删除,造成一个无法正常输入的现象(回车换行可以).仔细观察这种想象后发有可能是代码 ...

  2. 【CF542D】Superhero's Job 暴力

    [CF542D]Superhero's Job 题意:$ f(x)=\sum\limits_{d|x,gcd(d,{x\over d})=1} d$ 给出 $A$ ,求方程 $f(x)=A$ 的正整数 ...

  3. mssql for xml path使用

    准备工作: CREATE TABLE [dbo].[Students]( [id] [int] IDENTITY(1,1) NOT NULL, [names] [varchar](50) NULL, ...

  4. C#串口小助手

    做技术的通病,什么都想学,什么都想亲手做一遍.不然总感觉心里不踏实. 考研期间,利用晚上一点时间,照葫芦画瓢,练习使用c#快速开发一个简单的串口小助手. 这种前后端分离的设计方法,大大提高了开发速度, ...

  5. Unity 为队伍设置不同颜色的shader

    在魔兽争霸等一些游戏中,我们通过模型的颜色就能很轻松的区分队伍,如下:   实现的方法有很多,比如: 1,为不同队伍各出一张不同颜色的贴图(Hmmm,war3有的地图可以容纳12只队伍,美术大大们会很 ...

  6. Access无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开

    使用SQL Server导入有密码的Access数据库内容,连接时出现错误提示: Access无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开 参考百度信息,可以点上图中的高级,在 ...

  7. height:100%

    子元素的高度设置为height:100%时 继承父元素的高度为border+height 子元素的高度为height: 此时父元素的 box-sizing:content-box: border-bo ...

  8. ML.NET 0.10特性简介

    IDataView被单独作为一个类库包 IDataView组件为表格式数据提供了非常高效的处理方式,尤其是用于机器学习和高级分析应用.它被设计为可以高效地处理高维数据和大型数据集.并且也适合处理属于更 ...

  9. Java中Integer和int的异同

    public void Test1() { int a = 128; Integer b = 128; Integer c = 128; //Integer会自动拆箱成int,所以为ture Syst ...

  10. xpinyin模块

    import xpinyin s = xpinyin.Pinyin() #一个实例化,以后了解 print(s.get_pinyin('小小军')) #get_pinyin方法,转出来的拼音,每一个汉 ...