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_engine
- Base = 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 |
- +----+--------------+-----------+-------+
数据库测试
Python sqlalchemy orm 多外键关联的更多相关文章
- Python SQLAlchemy多对多外键关联时表结构
# 创建多对多表结构 from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.engine import cre ...
- Python sqlalchemy orm 多对多外键关联
多对多外键关联 注:使用三张表进行对应关联 实现代码: # 创建3个表 配置外键关联 # 调用Column创建字段 加类型 from sqlalchemy import Table, Column, ...
- Python sqlalchemy orm 外键关联
创建外键关联 并通过relationship 互相调用 如图: 实现代码: import sqlalchemy # 调用链接数据库 from sqlalchemy import create_engi ...
- pythonのsqlalchemy外键关联查询
#!/usr/bin/env python import sqlalchemy from sqlalchemy import create_engine from sqlalchemy.ext.dec ...
- sqlalchemy多外键关联
一.前言 如果有张表A的多个字段关联另一张表B的一个字段,就如同一个客户表的账单地址和发货地址,同时关联地址表中的id字段. 二.事例 # -*- coding: UTF-8 -*- from sql ...
- sqlalchemy外键关联
一.创建两张表,并关联外键 导入ForenginKey模块 # -*- coding: UTF-8 -*- from sqlalchemy import create_engine from sqla ...
- python SQLAchemy外键关联
join 1.利用filter import sqlalchemy from sqlalchemy import create_engine from sqlalchemy.ext.declarati ...
- 【Python】django模型models的外键关联使用
Python 2.7.10,django 1.8.6 外键关联:http://www.bubuko.com/infodetail-618303.html 字段属性:http://www.cnblogs ...
- 基于EF的数据外键关联查询
现在很多ORM不自带外键关联的实体查询,比如我查询用户,用时将关联的角色信息查询出来,那么就要进行2次查询,很麻烦.而我现在要做的就是基于EF的外键关联查询.很方便的. 首先,创建基础查询的BaseS ...
随机推荐
- JVM监控和调优常用命令工具总结
JVM监控和调优 在Java应用和服务出现莫名的卡顿.CPU飙升等问题时总是要分析一下对应进程的JVM状态以定位问题和解决问题并作出相应的优化,在这过程中Java自带的一些状态监控命令和图形化工具就非 ...
- Nginx模块开发与架构解析(nginx安装、配置说明)
第一章 研究nginx前的准备工作 Linux操作系统需要2.6及其以上的内核(支持epoll) 使用nginx的必备软件 Linux内核参数优化方案 安装nginx 控制nginx 第二章 ngin ...
- linux的基本操作(NFS服务配置)
服务配置 [什么是NFS] NFS会经常用到,用于在网络上共享存储.这样讲,你对NFS可能不太了解,笔者不妨举一个例子来说明一下NFS是用来做什么的.假如有三台机器A.B.C,它们需要访问同一个目录, ...
- C#获取邮件客户端保存的邮箱密码
有时候邮件客户端记录了邮箱密码,但自己却忘记了,此时可以使用C#建立一个临时的"邮件服务器",截取密码: IPEndPoint ipEndPoint = new IPEndPoin ...
- RFID世界网
RFID世界网 地址:http://www.rfidworld.com.cn/NFC/
- 查看Sql Server 数据库的内存使用情况
-- 查询SqlServer总体的内存使用情况 select type , sum(virtual_memory_reserved_kb) VM_Reserved , sum(virtual_memo ...
- hive sqoop,sqoop-hive import data
https://segmentfault.com/a/1190000002532293 https://www.zybuluo.com/aitanjupt/note/209968 create tab ...
- php 连接 数据库
$mysql_server_name='localhost'; //改成自己的mysql数据库服务器 $mysql_username='root'; //改成自己的mysql数据库用户名 mysql默 ...
- SpringBoot-@RequestParam
Request参数 在访问各种各样网站时,经常会发现网站的URL的最后一部分形如:?xxxx=yyyy&zzzz=wwww.这就是HTTP协议中的Request参数,它有什么用呢?先来看一个例 ...
- CSS中border和outline的区别
border: border-width:1px; border-style:solid; border-color:#ccc; 可以简写为:border:1ox solid #ccc; outlin ...