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:设置外键表于表之间建立关联. 多对一关联: 创建步骤,应该先创建好被关联的那一张表,然后再去创建关联的那一张表. 关联表的多条对应着被关联的那张表的一条记 ...
随机推荐
- js - 如何使子元素阻止继承父元素事件
想要阻止点击 #content 区域时触发a事件,需要在 #content 区域内加入阻止事件冒泡的代码,具体代码如下: <div id="box" onclick=&quo ...
- 终极C语言指针
// ex1.cpp : Defines the entry point for the console application. // #include "stdafx.h" # ...
- jQuery对标签、类样式、值、文档、DOM对象的操作
jquery的标签属性操作 使用attr()方法对html标签属性进行操作,attr如果参数是一个参数,表示获取html标签的属性值,如果是两个参数则是设置标签属性名以及对象的属性值 .prop()适 ...
- RPi 3B 无线连接配置
/********************************************************************** * RPi 3B 无线连接配置 * 说明: * 树莓派3 ...
- Failed to decode response: zlib_decode(): data error
/********************************************************************** * Failed to decode response: ...
- 使用w uptime vmstat top sar nload 等命令查看系统负载
1. w 和uptime,查看cpu的使用率: 2.vmstat 命令,查看更细的物理设备使用状况: 3.top 命令: top -c 可具体查看命令及路径: top -bn1 静太显示一条命令, ...
- Python数据结构——栈的列表实现
用Python内置的列表(list)实现栈,代码如下: import os os.chdir("E:\\Python_temp") class Stack: def __init_ ...
- 实验吧—Web——WP之 Guess Next Session
打开链接,他有给出查看原码的按钮,那么我们打开看看 在这个里面,如果GET的值等于session的就会给出flag 那么我们进行抓包改包 在输入框内随意输入一个值然后抓包 将password的值删去, ...
- Mybatis(七)-- LRU LFU 算法
这篇博客主要介绍LRU LFU 算法,因为在Mybatis的缓存中会用到,所以放到这个系列中了.此外,这是我翻译的一篇文章,觉得原文已经写的很好了,所以就直接翻译一下,留作知识整理. 英文原文出处如下 ...
- map遍历的几种方式和效率问题
一.map遍历的效率 先创建一个map,添加好数据: Map<String, String> map = new HashMap<>();for (int i = 0; i & ...