Python sqlalchemy orm 多外键关联

 多外键关联

注:在两个表之间进行多外键链接

 

如图:

 

案例:

# 创建两张表并添加外键主键

# 调用Column创建字段 加类型
from sqlalchemy import Integer, ForeignKey, String, Column# 调用基类Base
from sqlalchemy.ext.declarative import declarative_base# 调用操作链接,反查
from sqlalchemy.orm import relationship# 调用链接数据库
from sqlalchemy import create_engineBase = declarative_base()class Customer(Base):__tablename__ = 'customer'id = Column(Integer, primary_key=True)name = Column(String(64))# 以Address表id字段 设置两个外键billing_address_id = Column(Integer, ForeignKey("address.id"))shipping_address_id = Column(Integer, ForeignKey("address.id"))# relationship -允许你在Student表里通过backref字段反向查出所有它在表里的关联项-# foreign_keys=绑定外键 多次relationship 反差会识别不出指定数据所以添加foreign_keys参数。billing_address = relationship("Address",foreign_keys=[billing_address_id])shipping_address = relationship("Address",foreign_keys=[shipping_address_id])class Address(Base):__tablename__ = 'address'id = Column(Integer, primary_key=True)street = Column(String(64))city = Column(String(64))state = Column(String(64))# 返回一个可以用来表示对象的可打印字符串def __repr__(self):return self.street# encoding='utf-8' 链接字符集 ,echo=True 把所有信息打印出来
engine = create_engine("mysql+pymysql://root:123456@192.168.1.100/xiang",encoding='utf-8',#echo=True
                       )#---------------1.创建表-----------------#
# 创建表结构
Base.metadata.create_all(engine)
#---------------------------------------#

 

# 插入表内字段数据,测试访问

from www import orm_fk
from sqlalchemy.orm import sessionmaker# bind=engine 绑定engine socket实例
Session_class = sessionmaker(bind=orm_fk.engine)# 生成session实例,如同pymysql内的cursor
Session = Session_class()#---------------2.写入数据-----------------## 写入数据
# addr1 = orm_fk.Address(street="Tiantongyuan",city="ChangPing",state="BJ")
# addr2 = orm_fk.Address(street="Wudaokou",city="Haidian",state="BJ")
# addr3 = orm_fk.Address(street="Yanjiao",city="Langfang",state="HB")# 插入数据
# Session.add_all([addr1,addr2,addr3])# 写入数据 并调用 Address字段插入数据 为 Customer数据
# c1 = orm_fk.Customer(name="kevin",billing_address=addr1,shipping_address=addr2)
# c2 = orm_fk.Customer(name="Jack",billing_address=addr3,shipping_address=addr3)# 插入数据
# Session.add_all([c1,c2])
#---------------------------------------##---------------3.查询数据-----------------## 取出Customer内的 内存对象
obj = Session.query(orm_fk.Customer).filter(orm_fk.Customer.name=="kevin").first()# 通过内存 调用第一行name字段数据,
# 调用billing_address对应外键id的对应数据,
# 调用obj.shipping_address对应外键id的对应数据。
print(obj.name,obj.billing_address,obj.shipping_address)
#---------------------------------------## 执行事务
Session.commit()
# 表customer
+----+-------+--------------------+---------------------+
| id | name  | billing_address_id | shipping_address_id |
+----+-------+--------------------+---------------------+
|  1 | kevin |                  1 |                   2 |
|  2 | Jack  |                  3 |                   3 |
+----+-------+--------------------+---------------------+# 表address
+----+--------------+-----------+-------+
| id | street       | city      | state |
+----+--------------+-----------+-------+
|  1 | Tiantongyuan | ChangPing | BJ    |
|  2 | Wudaokou     | Haidian   | BJ    |
|  3 | Yanjiao      | Langfang  | HB    |
+----+--------------+-----------+-------+
数据库测试

 

转载于:https://www.cnblogs.com/xiangsikai/p/8328430.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

查找含有特定字符的存储过程

select p.name, m.definition from sys.procedures p inner join sys.sql_modules m on p.object_id m.object_idwhere m.definition like %150% 感谢怡红公子

将DataFrame格式的数据存入到mysql数据库中

因为最近频繁操作数据库,特别是写入数据比较麻烦。在DataFrame格式或者是Series格式的数据处理之后,总是会面临写入数据,迫不得已只能进行格式转换,搜索过程中发现了to_sql()函数,就百度了用法&…

从小米智能家居入手,揭秘物联网关键技术

物联网已不知不觉融入我们的生活中给我们带来便捷,比如,智能门锁、ETC 电子自动收费系统等,一开始感觉还挺很新奇的,现在也习以为常了。那到底什么是物联网?可能很多人还挺蒙圈的。所谓物联网,最终目的就是…

centos清除dns cache.

# /etc/init.d/nscd restart# service nscd restart# service nscd reload# nscd -i hosts https://www.2daygeek.com/flush-clear-dns-cache-on-ubuntu-centos-debian-fedora-mint-rhel-opensuse/# f转载于:https://www.cnblogs.com/jhj117/p/8335781.html

Linux开发初步

Linux开发初步 宗旨:技术的学习是有限的,分享的精神是无限的。 一、库函数与系统调用 1、系统调用函数和库函数 库函数是一些完成特定功能的函数,一般由某个标准组织制作发布,并形成一定的标准。使用库函数编写的函数一般可以应…

Orange——The Data

The Data 这个部分描述的是怎样在Orange上加载数据。我们也将展示如何探索数据,发现一些基本统计特性,怎么数据取样。 Data Input Orange可以读取本机以制表符分隔的格式的文件,也可以从任何主要的标准电子表格文件类型加载数据&#xff0…

[转载]VirtualBox网络配置详解

标题: [原创]VirtualBox网络配置详解来自 http://www.linuxsir.org/bbs/showthread.php?p1800679#post1800679 欢迎转载, 转载请注明作者, 谢谢下面简单介绍一下Test-bed Environment:Host : 偶的本本OS : Arch Linux (Kernel Version 2.6.20) 已安装uml_utilities(包含tunctl…

工作4年工资8K,还有什么理由不努力?

—— 提问发哥,我现在还是从事裸机开发,51单片机,会点arm,但没有用arm真正做完整开发的经验,细想感觉自己会的不是很多,薪资提不上去,想做更高级点的工作,虽然自学点,到没…

内存管理函数

内存管理函数 宗旨:技术的学习是有限的,分享的精神是无限的。 一、 动态申请内存 1、 malloc/free ——动态分配内存和释放内存 (1)函数原型 void *malloc(size_tsize); void free(void *str); (2)函数参…

嵌入式的坑在哪方面?

在知乎看到的,觉得见解不错,看完我觉得会对嵌入式有些见解,分享给大家。今年毕业刚工作半年,稍微写一下自己的见解。嵌入式就个万金油!干得活可以涉及硬件和软件!永远学不完的知识。嵌入式工程师简直就是硬…

Orange-Classification,Regression

1.Classification Orange和sklearn一样,提供了Classification和Regression等机器学习的算法,具体使用如下: import Orangedata Orange.data.Table("voting") lr Orange.classification.LogisticRegressionLearner() rf Orange…

CentOS、Ubuntu、Debian三个linux比较异同

Linux有非常多的发行版本,从性质上划分,大体分为由商业公司维护的商业版本与由开源社区维护的免费发行版本。 商业版本以Redhat为代表,开源社区版本则以debian为代表。这些版本各有不同的特点,在不同的应用领域发挥着不同的作用&a…

再见,杀毒软件之父,王江民!

王江民,中国最早的反病毒专家,被业界尊称“中国杀毒软件之父”、“中国反病毒第一人。以38岁为分界,王江民的前半生,是中国青年身残志坚的楷模,他的后半生是中国安全软件的奠基人,带领中国商用软件第一个走…

arm流水线相关

不管是arm几,只要是在执行指令时采用的是流水线机制,前3级的都是:取指->译码->执行.在"执行"阶段,pc总是指向该指令地址加8字节的地址.换句话说,pc总是指向正在执行的指令地址再加2条指令的地址.之所以是2条指令,是因为在"执行"阶段前还有"取指…

C语言——回调函数

C语言——回调函数 宗旨:技术的学习是有限的,分享的精神是无限的。 如果参数是一个函数指针,调用者可以传递一个函数的地址给实现者,让实现者去调用它,这就是回调函数。 void func(void (*f)(void*), void *p) 提供…

百面机器学习——第一章特征工程

特征工程:是对原始数据进行一系列工程处理,将其提炼为特征,作为输入供算法和模型使用。从本质上来讲,特征工程是一个表示和展现数据的过程。在实际工作中,特征工程旨在去除原始数据中的杂质和冗余,设计更高…

C语言不调用库函数画一个三角形

这个是知乎上面的一个题目,非常有意思,晚上打球回来就下决心要写代码实现下,再加上自己剖析,让大家明白一个三角形在坐标系中如何用C语言画出来的。https://www.zhihu.com/question/53832071/answer/1625616415第一步就是要先构建…

JS高级——变量提升

JS执行过程 1、首先是预解析&#xff1a;预解析过程最重要的是提升&#xff0c;在JavaScript代码在预解析阶段&#xff0c;会对以var声明的变量名&#xff0c;和function开头的语句块&#xff0c;进行提升操作 2、执行操作 全局中解析和执行过程 <script>console.log(a);…

ocs 2007技巧:查看存档服务记录的消息内容

要查看存档服务记录的消息内容&#xff0c;请进入SQL&#xff0c;运行下列命令&#xff1a;USE LcsLogGOSELECT * FROM Messages转载于:https://www.cnblogs.com/kksip/archive/2008/01/08/1030858.html

图像多分类——卷积神经网络

例子参考&#xff1a;https://www.jiqizhixin.com/articles/2019-05-15-2 数据集&#xff1a;https://www.cs.ccu.edu.tw/~wtchu/projects/MoviePoster/index.html 将获取到原始数据集&#xff0c;其中&#xff0c;有三个文件&#xff0c; Movie Poster Dataset是1980-2015年…