1.  
  2. orm_m2m.py
  1. from sqlalchemy import Table,Column,Integer,String,DATE, ForeignKey
  2. from sqlalchemy.orm import relationship ,sessionmaker
  3. from sqlalchemy.ext.declarative import declarative_base
  4. from sqlalchemy import create_engine
  5.  
  6. Base =declarative_base()#生成orm基类
  7.  
  8. book_m2m_author=Table('book_m2m_author', Base.metadata,
  9. Column('book_id',Integer,ForeignKey('books.id')),
  10. Column('author_id',Integer,ForeignKey('authors.id'))
  11. )
  12.  
  13. class Book(Base):
  14. __tablename__ = 'books'
  15. id =Column(Integer, primary_key=True)
  16. name = Column(String(64))
  17. pub_date=Column(DATE)
  18. authors =relationship('Author',secondary=book_m2m_author,backref='books')
  19.  
  20. def __repr__(self):
  21. return self.name
  22.  
  23. class Author(Base):
  24. __tablename__ = 'authors'
  25. id = Column(Integer, primary_key=True)
  26. name = Column(String(32))
  27.  
  28. def __repr__(self):
  29.  
  30. return self.name
  31. '''?charset=utf8 就可以支持中文'''
  32. engine = create_engine("mysql+pymysql://root:521521@192.168.71.140/oldboy?charset=utf8",
  33. ) # 可以加echo=True显示数据
  34.  
  35. Base.metadata.create_all(engine)#创建表结构
  1. orm_m2m_api.py
  2.  
  1. from day12 import orm_m2m
  2.  
  3. from sqlalchemy.orm import sessionmaker
  4.  
  5. Session_class = sessionmaker(bind=orm_m2m.engine)
  6.  
  7. Session =Session_class()#游标
  8.  
  9. '''插入数据'''
  10. Python = orm_m2m.Book(name="Python", pub_date="2018-07-17")
  11. Java = orm_m2m.Book(name="JAVA", pub_date="2018-07-16")
  12. Php = orm_m2m.Book(name="PHP", pub_date="2018-07-15")
  13.  
  14. a1 = orm_m2m.Author(name="xiaopang")
  15. a2 = orm_m2m.Author(name="dapangpang")
  16. a3 = orm_m2m.Author(name="Xiaopang_to_Dapangpang")
  17.  
  18. # Python.authors=[a1,a2]
  19. # Java.authors=[a1,a2,a3]
  20. # Php.authors = [a1,a3]
  21. # Session.add_all([Python,Java,Php,a1,a2])
  22. '''查询数据'''
  23. #查找dapangpang这个作者创作了几本书
  24. author_obj =Session.query(orm_m2m.Author).filter(orm_m2m.Author.name=="dapangpang").first()
  25. print(author_obj)
  26. #查找orm_m2m.Book.id==1的这本书有几个作者
  27. book_obj =Session.query(orm_m2m.Book).filter(orm_m2m.Book.id==2).first()
  28. print(book_obj.authors)
  29.  
  30. '''删除数据'''
  31. book_obj =Session.query(orm_m2m.Book).filter(orm_m2m.Book.id==1).first()
  32. book_obj.authors.remove(author_obj)#从一本书里删除一个作者
  33.  
  34. #删除作者
  35. author_obj =Session.query(orm_m2m.Author).filter(orm_m2m.Author.name=="dapangpang").first()
  36. Session.delete(author_obj)
  37. Session.commit()#提交

Mysql-Sqlalchemy-ORM-many_to_many的更多相关文章

  1. MySQL之ORM框架SQLAlchemy

    一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取 ...

  2. sqlalchemy orm 操作 MySQL

    一.ORM介绍 orm英文全称object relational mapping,是对象映射关系程序,简单来说类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却都是关系型的,为了 ...

  3. 第二百八十九节,MySQL数据库-ORM之sqlalchemy模块操作数据库

    MySQL数据库-ORM之sqlalchemy模块操作数据库 sqlalchemy第三方模块 sqlalchemysqlalchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API ...

  4. sqlalchemy ORM模块使用介绍

    前几天用到了flask框架,所以顺带介绍了flask-sqlalchemy扩展模块,去瞄一眼,由于有好多非web的python程序也用到了数据库,所以今天分享一下sqlalchemy的模块的使用方法. ...

  5. Python-12-MySQL & sqlalchemy ORM

    MySQL MySQL相关文章这里不在赘述,想了解的点击下面的链接: >> MySQL安装 >> 数据库介绍 && MySQL基本使用 >> MyS ...

  6. sqlalchemy ORM

    本节内容       ORM介绍     sqlalchemy安装     sqlalchemy基本使用     多外键关联     多对多关系   1. ORM介绍   orm英文全称object ...

  7. SQLAlchemy ORM之建表与查询

    作了最基本的操作,找找感觉.. #coding=utf-8 from datetime import datetime from sqlalchemy import (MetaData, Table, ...

  8. python 学习笔记十一 SQLALchemy ORM(进阶篇)

    SqlAlchemy ORM SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据A ...

  9. Python-Day12 Python mysql and ORM

    一.Mysql数据库 1.什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,    每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据 ...

  10. 那些年被我坑过的Python——牵一发动全身 第十一章MySQL、ORM

    #!/usr/bin/env python # -*- coding:utf-8 -*- __Author__ = "Zhang Xuyao" from sqlalchemy im ...

随机推荐

  1. CentOS7遇到问题总结

    问题1.保护多库版本:libstdc++-4.8.5-28.el7_5.1.i686 != libstdc++-4.8.5-28.el7.x86_64 错误:保护多库版本:libgcc-4.8.5-2 ...

  2. C++cctype软件包函数摆脱,ASCII码!

    对于字符,你是否还在用ASCII码? 下面是C++的函数库,摆脱ASCI码! 1.isalnum(): 判断是否为数字和字母 2.isalpha(): 判断是否是字母 3.iscntrl(): 判断是 ...

  3. hadoop patch

    ERROR org.apache.hadoop.hdfs.server.blockmanagement.BlockManager: ReplicationMonitor thread received ...

  4. 使用git Bash Here 绑定账号密码错误后 无法自动重新绑定

    新安装的git 要打开gitbash 运行下面两个命令:1 git config --global user.name "Your Name"2 git config --glob ...

  5. JVM----Class类文件结构

    JVM平台无关性 Java具有平台无关性,也就是任何操作系统都能运行Java代码.之所以能实现这一点,是因为Java运行在虚拟机之上,不同的操作系统都拥有各自的Java虚拟机,因此Java能实现“一次 ...

  6. 性能监控系统 | 从0到1 搭建Web性能监控系统

    工具介绍 1. Statsd 是一个使用Node开发网络守护进程,它的特点是通过UDP(性能好,及时挂了也不影响主服务)或者TCP来监听各种数据信息,然后发送聚合数据到后端服务进行处理.常见支持的「G ...

  7. Android系统服务 —— WMS与AMS

    “可以毫不夸张的说,Android的framework层主要是由WMS.AMS还有View所构成,这三个模块穿插交互在整个framework中,掌握了它们之间的关系和每一个逻辑步骤,你对framewo ...

  8. 一百零六:CMS系统之修改邮箱功能完成

    这里采用把验证码放到memcached中,所以封装一个memcached的操作 import memcache cache = memcache.Client(['127.0.0.1:11211'], ...

  9. Oracle 本地创建多个实例并创建多个监听(只能在服务端弄,不可在客户端)

    注意:监听必须在客户端创建,在客户端创建,会报错. 1.创建监听 通过 Net Configuration Assistant  创建监听,设置端口: 注意:此监听创建完后,服务列表里面并没有此服务的 ...

  10. ssm整合用到的依赖jar包(不充足)

    <!--spring 的核心的jar包--><dependency> <groupId>org.springframework</groupId> &l ...