多外键关联

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

如图:

案例:

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

# 调用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 多外键关联的更多相关文章

  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. ASP.NET MVC+HighCharts开发统计图表

    HighCharts是开源的Web图表js组件,与D3.js一样,经常用于数据可视化.HighCharts图表类型丰富,功能非常强大,是很好的数据可视化解决方案,其官方网站为:http://www.h ...

  2. C#串口小助手

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

  3. gitlab-ci + k8s 之gitlab-ci(一)

    目前常用的持续集成工具主要是jenkins与gitlab-ci ,我已在另一博文中详细记录了jenkins部署过程(其中包括gitlab的搭建),此篇介绍gitlab-ci的使用. 背景介绍 GitL ...

  4. D2

    Cosmic Cleaner: 为什么大家都知道球缺怎么求,我没听说过啊??? 我真的是印象里今天第一次听说球缺这个东西啊... 我一看,哇,神仙几何题,毫无头绪,投了投了,然后就被过穿了??? tl ...

  5. vue中使用html2canvas及解决html2canvas截屏图片模糊问题

    最近在项目中用到了html2canvas插件,遇到的一些坑写下来,与大家共勉. html2canvas  官方网站http://html2canvas.hertzen.com/index.html 这 ...

  6. 16-1 ECMA5与ECMA6的函数定义

    ECMA5: function Drag(id){ this.ele = document.getElementById(id); var that = this; this.ele.onmoused ...

  7. android不知不觉偷拍他人功能实现(手机关闭依然拍照)【申明:来源于网络】

    android不知不觉偷拍他人功能实现(手机关闭依然拍照)[申明:来源于网络] 地址:http://blog.csdn.net/huangxiaoguo1/article/details/536660 ...

  8. lucene学习教程

    1Lucene的介绍 ①Lucene是什么: 是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎 ②Lu ...

  9. 让我对 docker swarm mode 的基本原理豁然开朗的几篇英文博文

    关于 docker swarm mode 的基本架构 How does it work? Docker! Part 1: Swarm general architecture 关于 Overlay N ...

  10. Gym 102056L - Eventual … Journey - [分类讨论][The 2018 ICPC Asia-East Continent Final Problem L]

    题目链接:https://codeforces.com/gym/102056/problem/L LCR is really an incredible being. Thinking so, sit ...