多外键关联

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

如图:

案例:

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

  1. # 调用Column创建字段 加类型
  2. from sqlalchemy import Integer, ForeignKey, String, Column
  3.  
  4. # 调用基类Base
  5. from sqlalchemy.ext.declarative import declarative_base
  6.  
  7. # 调用操作链接,反查
  8. from sqlalchemy.orm import relationship
  9.  
  10. # 调用链接数据库
  11. from sqlalchemy import create_engine
  12.  
  13. Base = declarative_base()
  14.  
  15. class Customer(Base):
  16. __tablename__ = 'customer'
  17. id = Column(Integer, primary_key=True)
  18. name = Column(String(64))
  19.  
  20. # 以Address表id字段 设置两个外键
  21. billing_address_id = Column(Integer, ForeignKey("address.id"))
  22. shipping_address_id = Column(Integer, ForeignKey("address.id"))
  23.  
  24. # relationship -允许你在Student表里通过backref字段反向查出所有它在表里的关联项-
  25. # foreign_keys=绑定外键 多次relationship 反差会识别不出指定数据所以添加foreign_keys参数。
  26. billing_address = relationship("Address",foreign_keys=[billing_address_id])
  27. shipping_address = relationship("Address",foreign_keys=[shipping_address_id])
  28.  
  29. class Address(Base):
  30. __tablename__ = 'address'
  31. id = Column(Integer, primary_key=True)
  32. street = Column(String(64))
  33. city = Column(String(64))
  34. state = Column(String(64))
  35.  
  36. # 返回一个可以用来表示对象的可打印字符串
  37. def __repr__(self):
  38. return self.street
  39.  
  40. # encoding='utf-8' 链接字符集 ,echo=True 把所有信息打印出来
  41. engine = create_engine("mysql+pymysql://root:123456@192.168.1.100/xiang",encoding='utf-8',
  42. #echo=True
  43. )
  44.  
  45. #---------------1.创建表-----------------#
  46. # 创建表结构
  47. Base.metadata.create_all(engine)
  48. #---------------------------------------#

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

  1. from www import orm_fk
  2. from sqlalchemy.orm import sessionmaker
  3.  
  4. # bind=engine 绑定engine socket实例
  5. Session_class = sessionmaker(bind=orm_fk.engine)
  6.  
  7. # 生成session实例,如同pymysql内的cursor
  8. Session = Session_class()
  9.  
  10. #---------------2.写入数据-----------------#
  11.  
  12. # 写入数据
  13. # addr1 = orm_fk.Address(street="Tiantongyuan",city="ChangPing",state="BJ")
  14. # addr2 = orm_fk.Address(street="Wudaokou",city="Haidian",state="BJ")
  15. # addr3 = orm_fk.Address(street="Yanjiao",city="Langfang",state="HB")
  16.  
  17. # 插入数据
  18. # Session.add_all([addr1,addr2,addr3])
  19.  
  20. # 写入数据 并调用 Address字段插入数据 为 Customer数据
  21. # c1 = orm_fk.Customer(name="kevin",billing_address=addr1,shipping_address=addr2)
  22. # c2 = orm_fk.Customer(name="Jack",billing_address=addr3,shipping_address=addr3)
  23.  
  24. # 插入数据
  25. # Session.add_all([c1,c2])
  26. #---------------------------------------#
  27.  
  28. #---------------3.查询数据-----------------#
  29.  
  30. # 取出Customer内的 内存对象
  31. obj = Session.query(orm_fk.Customer).filter(orm_fk.Customer.name=="kevin").first()
  32.  
  33. # 通过内存 调用第一行name字段数据,
  34. # 调用billing_address对应外键id的对应数据,
  35. # 调用obj.shipping_address对应外键id的对应数据。
  36. print(obj.name,obj.billing_address,obj.shipping_address)
  37. #---------------------------------------#
  38.  
  39. # 执行事务
  40. Session.commit()
  1. # 表customer
  2. +----+-------+--------------------+---------------------+
  3. | id | name | billing_address_id | shipping_address_id |
  4. +----+-------+--------------------+---------------------+
  5. | 1 | kevin | 1 | 2 |
  6. | 2 | Jack | 3 | 3 |
  7. +----+-------+--------------------+---------------------+
  8.  
  9. # 表address
  10. +----+--------------+-----------+-------+
  11. | id | street | city | state |
  12. +----+--------------+-----------+-------+
  13. | 1 | Tiantongyuan | ChangPing | BJ |
  14. | 2 | Wudaokou | Haidian | BJ |
  15. | 3 | Yanjiao | Langfang | HB |
  16. +----+--------------+-----------+-------+

数据库测试

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

  1. Python SQLAlchemy多对多外键关联时表结构

    # 创建多对多表结构 from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.engine import cre ...

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

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

  3. Python sqlalchemy orm 外键关联

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

  4. pythonのsqlalchemy外键关联查询

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

  5. sqlalchemy多外键关联

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

  6. sqlalchemy外键关联

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

  7. python SQLAchemy外键关联

    join 1.利用filter import sqlalchemy from sqlalchemy import create_engine from sqlalchemy.ext.declarati ...

  8. 【Python】django模型models的外键关联使用

    Python 2.7.10,django 1.8.6 外键关联:http://www.bubuko.com/infodetail-618303.html 字段属性:http://www.cnblogs ...

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

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

随机推荐

  1. JVM监控和调优常用命令工具总结

    JVM监控和调优 在Java应用和服务出现莫名的卡顿.CPU飙升等问题时总是要分析一下对应进程的JVM状态以定位问题和解决问题并作出相应的优化,在这过程中Java自带的一些状态监控命令和图形化工具就非 ...

  2. Nginx模块开发与架构解析(nginx安装、配置说明)

    第一章 研究nginx前的准备工作 Linux操作系统需要2.6及其以上的内核(支持epoll) 使用nginx的必备软件 Linux内核参数优化方案 安装nginx 控制nginx 第二章 ngin ...

  3. linux的基本操作(NFS服务配置)

    服务配置 [什么是NFS] NFS会经常用到,用于在网络上共享存储.这样讲,你对NFS可能不太了解,笔者不妨举一个例子来说明一下NFS是用来做什么的.假如有三台机器A.B.C,它们需要访问同一个目录, ...

  4. C#获取邮件客户端保存的邮箱密码

    有时候邮件客户端记录了邮箱密码,但自己却忘记了,此时可以使用C#建立一个临时的"邮件服务器",截取密码: IPEndPoint ipEndPoint = new IPEndPoin ...

  5. RFID世界网

    RFID世界网 地址:http://www.rfidworld.com.cn/NFC/

  6. 查看Sql Server 数据库的内存使用情况

    -- 查询SqlServer总体的内存使用情况 select type , sum(virtual_memory_reserved_kb) VM_Reserved , sum(virtual_memo ...

  7. hive sqoop,sqoop-hive import data

    https://segmentfault.com/a/1190000002532293 https://www.zybuluo.com/aitanjupt/note/209968 create tab ...

  8. php 连接 数据库

    $mysql_server_name='localhost'; //改成自己的mysql数据库服务器 $mysql_username='root'; //改成自己的mysql数据库用户名 mysql默 ...

  9. SpringBoot-@RequestParam

    Request参数 在访问各种各样网站时,经常会发现网站的URL的最后一部分形如:?xxxx=yyyy&zzzz=wwww.这就是HTTP协议中的Request参数,它有什么用呢?先来看一个例 ...

  10. CSS中border和outline的区别

    border: border-width:1px; border-style:solid; border-color:#ccc; 可以简写为:border:1ox solid #ccc; outlin ...