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. 本地部署DeepSeek后,没有好看的交互界面怎么行!

    大家好,我是晓凡. 写在前面 在前面的文章中手摸手的带小伙伴们在本地部署了DeepSeek.但是,部署完之后,我们要与之交互,只能在命令行中进行. 忘记怎么部署的小伙伴,来这儿复习一下~ 命令行交互如 ...

  2. 微信分享前端开发全程详解含iOS、安卓、H5、ReactNative以及微信开放标签的适配和使用

    2024年9月,本人在做微信分享前端部分的iOS.安卓和H5的页面和功能时踩了不少坑,于是写了这篇文章,内容包括微信分享在上面三个端的技术点和坑点.解决办法,微信开放标签的相关适配,以及ReactNa ...

  3. FANUC机器人M-16iB伺服马达维修参考措施

    随着工业自动化技术的不断发展,机器人已经广泛应用于各个领域.其中,发那科机器人以其卓越的性能和稳定性,成为了许多企业的首选.然而,伺服电机作为机器人核心部件之一,FANUC机械手维修保养至关重要. 一 ...

  4. webgpu学习问题,遇到了create graphics pipeline state failed错误

    在学习webgpu并渲染图像时发生create graphics pipeline state failed with E_INVALIDARG (0x80070057)错误,图像无法成功渲染. ht ...

  5. Typecho头像被墙的解决方法

    首先下载最新开发版本的TYPECHO,然后,在config.inc.php自定义如下: /** 自定义gravatar url前缀 */ define('__TYPECHO_GRAVATAR_PREF ...

  6. docker - [14] redis集群部署

    本章节是在一个服务器上进行演示 一.准备工作 (1)创建redis集群使用的网络:redis-net docker network create redis-net --subnet 172.38.0 ...

  7. faker 函数支持哪些

    3.2 常用函数 除了上述介绍的fake.name和fake.address生成姓名和地址两个函数外,常用的faker函数按类别划分有如下一些常用方法. 1.地理信息类 fake.city_suffi ...

  8. Swagger-交互式API文档

    1. Swagger简介 前后端分离 前端 -> 前端控制层.视图层 后端 -> 后端控制层.服务层.数据访问层 前后端通过API进行交互 前后端相对独立且松耦合 产生的问题 前后端集成, ...

  9. datagrid源码

    /** * jQuery EasyUI 1.2.3 * * Licensed under the GPL terms * To use it on other terms please contact ...

  10. linux ln命令详解

    介绍 ln是linux的一个重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在 ...