sqlalchemy_many_to_many.py

#!-*-coding:utf-8-*-
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

base=declarative_base()

book_m2m_author=Table('book_m2m_author',base.metadata,
                     Column('book_id',Integer,ForeignKey('books.id')),
                     Column('author_id',Integer,ForeignKey('authors.id')))

class Book(base):
    __tablename__='books'
    id=Column(Integer,primary_key=True)
    name=Column(String(64))
    pub_date=Column(DATE)
    authors=relationship("Author",secondary=book_m2m_author,backref='books')#secondary查第三张表关联关系 backref Author反查有多少本书
    def __repr__(self):
        return self.name

class Author(base):
    __tablename__='authors'
    id=Column(Integer,primary_key=True)
    name=Column(String(32))
    def __repr__(self):
        return self.name

engine=create_engine("mysql+pymysql://root:123456@192.168.0.6/shop_db?charset=utf8",echo=False)#连接数据库 echo=TRUE输出执行过程
#?charset=utf8可插入汉字
base.metadata.create_all(engine)#创建表

sqlalchemy_many_to_many_api.py

from day12 import sqlalchemy_many_to_mang
from sqlalchemy.orm import sessionmaker

Session_class = sessionmaker(bind=sqlalchemy_many_to_mang.engine)  # 创建与数据库的连接session class ,注意,这里返回给session的是个class,不是实例
session = Session_class()  # 生成session实例 session会话 类似cursor
'''
b1=sqlalchemy_many_to_mang.Book(name="leran python with Alex",pub_date="2017-06-25")
b2=sqlalchemy_many_to_mang.Book(name="leran zhangbility with alex",pub_date="2016-06-25")
b3=sqlalchemy_many_to_mang.Book(name="leran hook uo girls with alex",pub_date="2015-06-25")
b4=sqlalchemy_many_to_mang.Book(name="风萧萧兮易水寒",pub_date="2018-06-25")

a1=sqlalchemy_many_to_mang.Author(name="alex")
a2=sqlalchemy_many_to_mang.Author(name="jack")
a3=sqlalchemy_many_to_mang.Author(name="rain")

b1.authors=[a1,a3]
b3.authors=[a1,a2,a3]

session.add_all([b4])
'''
author_obj=session.query(sqlalchemy_many_to_mang.Author).filter(sqlalchemy_many_to_mang.Author.name=="alex").first()
print(author_obj.books)#通过作者取书
book_obj=session.query(sqlalchemy_many_to_mang.Book).filter(sqlalchemy_many_to_mang.Book.id==2).first()
print(book_obj.authors)
#book_obj.authors.remove(author_obj)#给书删除作者
#session.delete(author_obj)#删除作者
session.commit()

sqlalchemy多对多关联的更多相关文章

  1. 数据库多对多关联表(Python&MySQL)

    Python Python对MySQL数据库操作使用的是sqlalchemy这个ORM框架 #一本书可以有多个作者,一个作者又可以出版多本书 from sqlalchemy import Table, ...

  2. hibernate多对多关联映射

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  3. mybatis多对一关联

    mybatis多对一关联查询实现 1.定义实体 定义实体的时候需要注意,若是双向关联,就是说双方的属性中都含有对方对象作为域属性出现, 那么在写toString()方法时需要注意,只让某一方输出即可, ...

  4. 【Hibernate框架】关联映射(多对多关联映射)

    按着我们的总结行进计划,接下来,就是有关于多对多映射的总结了. 我们来举个例子啊,很长时间以来,房价暴涨不落,但是还有很多人拥有很多套房产,假如说,一个富豪拥有九套房产,家里人么准去住哪一套,我们就以 ...

  5. 《Entity Framework 6 Recipes》中文翻译系列 (30) ------ 第六章 继承与建模高级应用之多对多关联

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第六章  继承与建模高级应用 现在,你应该对实体框架中基本的建模有了一定的了解,本章 ...

  6. Hibernate双向多对多关联

    一.配置双向多对多关联 以Project类(项目)和Emp类(员工)为例: 1.创建Project类,并需要定义集合类型的Emp属性 public class Project { //编号 priva ...

  7. (Hibernate进阶)Hibernate映射——多对多关联映射(八)

    多对多映射是现实生活中最常见的映射,也是最容易理解的映射.废话少说,直接开始. 映射原理 不论是单向关联还是双向关联都是通过第三张表,将两个表中的主键放到第三张做一个关联.用第三张表来解决可能会造成数 ...

  8. EF – 8.多对多关联

    5.6.10 <多对多关联(上)> 时长:9分57秒 难度:难 5.6.11<多对多关联(下)> 时长:8分50秒 难度:难 如果单独地把多对多关联的CRUD拿出来讲,确实比较 ...

  9. atitit.atitit.hb many2one relate hibernate 多对一关联配置..

    atitit.atitit.hb many2one relate hibernate 多对一关联配置.. 1. 多对一单向 @ManyToOne 1 1. 其中@JoinColumn 注解 2 2.  ...

  10. 05.Hibernate多对多关联

        前言:本文讲解使用Hibernate映射多对多关联关系,并使用多种方式映射多对多关联. 1.数据库表的多对多关系     本文根据学生信息表(tb_student)和教师信息表(tb_teac ...

随机推荐

  1. Typescript通用帮助类,格式化日期时间等

    /** * 格式化日期选项 */ export class DateFormatOption { "M+": number;//月 "d+": number;/ ...

  2. Typecho去除更新检测和后台日志

    Typecho去除官方日志 打开 admin/index.php,找到下面的代码并删除,在 93-102 行. 代码: <div class="col-mb-12 col-tb-4&q ...

  3. Processing模拟控制多台舵机-以距离为参数 程序参考

    又是一次课程学习的结束,辅导学生的过程也很受益,温故而知新.该组同学需要Arduino控制多达6个舵机,而且基于距离这一参数,在不同距离值之间会有不同的触发事件,也就是6个舵机转的角度都有所不同,而且 ...

  4. P4118 [Ynoi2018] 末日时在做什么?有没有空?可以来拯救吗?

    YNOI 智慧题 EasyVer1 [Ynoi Easy Round 2015] 世上最幸福的女孩 EasyVer2 小白逛公园 先看 EasyVer2 单点修改 区间查询最大子段和 考虑在线段树维护 ...

  5. win7系统清理C盘空间方法实测

    问题描述:win7电脑C盘容易满,采用如下方法清理 方法一:win+r,输入%temp%查看临时文件,手动删除不需要的文件 方法二:减小休眠文件:如果你很少使用休眠模式,可以通过win+r输入cmd命 ...

  6. 豆包:php如何模拟多客户端访问服务器

    在 PHP 中模拟多客户端访问服务器可以通过以下几种方式实现,具体方法根据需求选择: 方法 1:使用 cURL 多请求(Multi Handle) 通过  curl_multi_*  系列函数实现并发 ...

  7. go mod 安装使用 beego

    go module基本使用 // 创建目录,初始化新项目 mkdir beemod cd beemod go mod init beemod 创建 server.go 文件 package main ...

  8. ubuntu网络连接失败

    首先要保证pc上可以连接上网络,然后进行下面的操作: 1.首先选择VMware的编辑选项 2.选择虚拟网络编辑器 3.还原默认设置,等待几分钟,确定就可以解决了

  9. Django实战项目-学习任务系统-文章汇总

    学习任务系统1.0版本已经基本完成了.现在按顺序整理下文章和链接,按照开发时间顺序列举,方便想要完整学习的人. 理论上说,按照文章代码可以搭建该系统的70%主体功能,剩下一些小的功能自己参考现有代码学 ...

  10. MySQL-事务相关知识

    事务ACID的理解 引入事务的主要目的: 保证数据库从一个一致性状态切换为另一种一致性状态 所有修改要么都保存,要么都不保存 A 原子性 原子性关注单个事务的整体性,需要保证事务中的全部操作是一个单元 ...