sqlalchemy操作----多表关联
有二张表,一张作者表,一张书表,一个作者写多本书,一本书可以由多个作者写,与是通过新加一张关系表把他们联系起来
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author aliex-hrg from sqlalchemy import Table, Column, Integer,String,DATE, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker engine = create_engine("mysql+pymysql://hrg:123@192.168.80.100:3306/test?charset=utf8")
Base = declarative_base() #生成orm基类 Base = declarative_base()
book_to_author = Table('book_to_author', Base.metadata,
Column('book_id',Integer,ForeignKey('books.id')),
Column('author_id',Integer,ForeignKey('authors.id')),
) class Author(Base):
__tablename__ = 'authors' #表名
id = Column(Integer, primary_key=True)
name = Column(String(32))
def __repr__(self):
return self.name class Book(Base):
__tablename__ = 'books' #表名
id = Column(Integer, primary_key=True)
name = Column(String(32))
authors = relationship('Author', secondary=book_to_author, backref='books')
def __repr__(self):
return self.name Base.metadata.create_all(engine) #创建表 a1 = Author(name='alex')
a2 = Author(name='keke')
a3 = Author(name='tom')
b1 = Book(name='linux')
b2 = Book(name='python')
b3 = Book(name='C++') b1.authors = [a1,a2,a3]
b2.authors = [a1,a3]
b3.authors = [a3] Session_class = sessionmaker(bind=engine)
Session = Session_class() Session.add_all([a1,a2,a3,b1,b2,b3])
Session.commit()
print('--------通过书表查关联的作者---------')
book_obj = Session.query(Book).filter(Book.name=='linux').first()
print(book_obj.name,book_obj.authors)
print('--------通过作者表查关联的书---------')
author_obj = Session.query(Author).filter(Author.name=='alex').first()
print(author_obj.name,author_obj.books)
Session.commit() #通过书删除作者 只会从book_to_author表中删除记录
sobj = Session.query(Author).filter(Author.name=='alex').first() #找出要删除作者alex的对象名
bobj = Session.query(Book).filter(Book.name=='linux').first() #找出从linux这本书中删除
bobj.authors.remove(sobj)
Session.commit() #直接删除作者 会从authors,book_to_author中删除
#删除作者时,会把这个作者跟所有书的关联关系数据也自动删除
author_obj =Session.query(Author).filter_by(name="tom").first()
Session.delete(author_obj)
Session.commit()
。。。。
sqlalchemy操作----多表关联的更多相关文章
- Django 08 Django模型基础3(关系表的数据操作、表关联对象的访问、多表查询、聚合、分组、F、Q查询)
Django 08 Django模型基础3(关系表的数据操作.表关联对象的访问.多表查询.聚合.分组.F.Q查询) 一.关系表的数据操作 #为了能方便学习,我们进入项目的idle中去执行我们的操作,通 ...
- SQLAlchemy 使用(二)表关联
前言 在上一章中我们介绍了 SQLAlchemy 建立基本表,但是一般情况下,表之间是有关联的,比如 一对一/一对多/多对多,当然 SQLAlchemy 是支持建立model时指定关系的 正文 多对一 ...
- sqlalchemy操作----外键关联,relationship
... #!_*_coding:utf-8_*_ #__author__:"Alex huang" import sqlalchemy from sqlalchemy import ...
- sqlalchemy操作----建表 插入 查询 删除
... #!_*_coding:utf-8_*_ #__author__:"Alex huang" import sqlalchemy from sqlalchemy import ...
- 字节跳动基于ClickHouse优化实践之“多表关联查询”
更多技术交流.求职机会.试用福利,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 相信大家都对大名鼎鼎的ClickHouse有一定的了解了,它强大的数据分析性能让人印象深刻.但在字节大量 ...
- Oracle中如何实现Mysql的两表关联update操作
在看<MySQL 5.1参考手册>的时候,发现MySQL提供了一种两表关联update操作.原文如下: UPDATE items,month SET items.price=month.p ...
- MagicalRecord 多表关联数据操作
最近在使用MagicalRecord做数据持久层CoreData的操作库,今天做了一个多表关联数据的操作,整理了一个demo,特此记录一下. 关于如何使用Cocopads 和 MagicalRecor ...
- mongodb操作之使用javaScript实现多表关联查询
一.数据控制 mongodb操作数据量控制,千万控制好,不要因为操作的数据量过多而导致失败. 演示一下发生此类错误的错误提示:
- mysql之表与表关联和表操作
一 表于表之间的关联 foregin key:设置外键表于表之间建立关联. 多对一关联: 创建步骤,应该先创建好被关联的那一张表,然后再去创建关联的那一张表. 关联表的多条对应着被关联的那张表的一条记 ...
随机推荐
- 性能测试-10.数据分析Analysis
Analysis Summary 平均响应时间(Average TransactionResponse Time) 每秒响应数(Transactions per Second) 1.Vuser Ru ...
- vim3
使用vim编辑多个文件 编辑多个文件有两种形式,一种是在进入vim前使用的参数就是多个文件.另一种是在进入vim后再编辑其他文件. 1. vim 1.txt 2.txt 在命令行模式下输入:n编辑2. ...
- Sublime Text 3(中文)添加Lua编译环境
Sublime Text 3(中文)添加Lua编译环境 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 没有 ...
- PSP Daily桌面软件Beta阶段WBS以及PSP【王者荣耀交流协会】
一.WBS 工具:ProcessOn,请访问网址[https://www.processon.com/]. 分解思路:功能是什么/功能实现步骤?技术原型demo? 二.PSP
- sudo命令 和限制root 远程登陆
1.对sudo命令的配制,输入 visudo 然后,找到92行进行以下配制 以下就是效果 比如: 如果要同时给两个普通用户设置这样子的权限,就可以用另一种方式,下面这种方式不可取的 而是用这种 效果如 ...
- django 有关session内部函数做法
session在set和调用时其实分别做了三步: def fileupload(request): request.session['k1'] = 'ppp' ''' .生成一个随机字符串 .set_ ...
- odoo软件名称及授权协议的变化
先看一张表格 起步时叫TinyERP,微小的ERP:发展中期叫做OpenERP,开放的ERP:历经10年积累的软件,客户群,开发支持用户群,开始构筑自己的商业模式.到8版本,改名为Odoo.同时,软件 ...
- 当爬虫遇到js加密
当爬虫遇到js加密 我们在做python爬虫的时候经常会遇到许多的反爬措施,js加密就是其中一种. 破解js加密的方法也有很多种: 1.直接驱动浏览器抓取数据,无视js加密. 2.找到本地加密的js代 ...
- servlet路径映射中的完全路径匹配、目录匹配、扩展名匹配
在servlet路径映射中,关于url-pattern的配置有三种,分别是完全路径匹配.目录匹配.扩展名匹配 其优先级分别为:完全路径匹配>目录匹配>扩展名匹配: 一.三种路径印射的区别 ...
- NDK: GCC 4.6 crashes
used version: NDK r9b, arm-linux-androideabi-4.6 GCC, with "-O2 -finline-limit=24". got t ...