orm_m2m.py
from sqlalchemy import Table,Column,Integer,String,DATE, ForeignKey
from sqlalchemy.orm import relationship ,sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine Base =declarative_base()#生成orm基类 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') 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
'''?charset=utf8 就可以支持中文'''
engine = create_engine("mysql+pymysql://root:521521@192.168.71.140/oldboy?charset=utf8",
) # 可以加echo=True显示数据 Base.metadata.create_all(engine)#创建表结构
orm_m2m_api.py

from day12 import orm_m2m

from sqlalchemy.orm import sessionmaker

Session_class = sessionmaker(bind=orm_m2m.engine)

Session =Session_class()#游标

'''插入数据'''
Python = orm_m2m.Book(name="Python", pub_date="2018-07-17")
Java = orm_m2m.Book(name="JAVA", pub_date="2018-07-16")
Php = orm_m2m.Book(name="PHP", pub_date="2018-07-15") a1 = orm_m2m.Author(name="xiaopang")
a2 = orm_m2m.Author(name="dapangpang")
a3 = orm_m2m.Author(name="Xiaopang_to_Dapangpang") # Python.authors=[a1,a2]
# Java.authors=[a1,a2,a3]
# Php.authors = [a1,a3]
# Session.add_all([Python,Java,Php,a1,a2])
'''查询数据'''
#查找dapangpang这个作者创作了几本书
author_obj =Session.query(orm_m2m.Author).filter(orm_m2m.Author.name=="dapangpang").first()
print(author_obj)
#查找orm_m2m.Book.id==1的这本书有几个作者
book_obj =Session.query(orm_m2m.Book).filter(orm_m2m.Book.id==2).first()
print(book_obj.authors) '''删除数据'''
book_obj =Session.query(orm_m2m.Book).filter(orm_m2m.Book.id==1).first()
book_obj.authors.remove(author_obj)#从一本书里删除一个作者 #删除作者
author_obj =Session.query(orm_m2m.Author).filter(orm_m2m.Author.name=="dapangpang").first()
Session.delete(author_obj)
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. 如何简单的在linux上安装jdk并配置环境变量

    这篇文章是为了给我一会自己安装的时候方便使用的,所以内容很简单,平时在wendows系统上安装很容易,但是换到linux系统上面就蒙圈了. 一.下载jdk文件 我这提供的是官方的地址:http://w ...

  2. MongoDB系列二:MongoDB安装过程

    一.MongoDB安装,以Linux系统安装为例:(下载:www.mongodb.org 注意使用stable版本) 1.下载最新版本的MongoDB安装包,wget http://fastdl.mo ...

  3. 带着问题看redux源码

    前言 作为前端状态管理器,这个比较跨时代的工具库redux有很多实现和思想值得我们思考.在深入源码之前,我们可以相关注下一些常见问题,这样带着问题去看实现,也能更加清晰的了解. 常见问题 大概看了下主 ...

  4. iReport 3.7.6 jasperreport 生成PDF汉字不显示问题的解决

    1.下载iTextAsian.jar 下载地址:https://www.oschina.net/action/code/download?code=51668&id=75706 2.在Irep ...

  5. Qt自定义窗口部件

    QtDesigner自定义窗口部件有两种方法:改进法(promotion)和插件法(plugin)   改进法   1.改进法之前,要先写好子类化QSpinBox后的HexspinBox.h和Hexs ...

  6. 开发-组件-GemBox:百科

    ylbtech-开发-组件-GemBox:百科 6000+ Companies Trust GemBox With .NET and Java File Format Components GemBo ...

  7. jQuery九类选择器

    目的:通过选择器,能定位web页面(HTML/JSP/XML)中的任何标签, 注意:项目中,通常是多种选择器一起使用 基本选择器 <html> <head> <meta ...

  8. 用SQL语句操作Sqlite数据库的示例代码

    import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.databa ...

  9. 小D课堂 - 新版本微服务springcloud+Docker教程_3-04 SpringCloud微服务核心组件Eureka介绍和闭源后影响

    笔记 4.SpringCloud微服务核心组件Eureka介绍和闭源后影响     简介:         SpringCloud体系介绍             官方地址:http://projec ...

  10. Java数组(4):数组实用功能

    Java标准类库的System.arraycopy()方法,及在java.utils.Arrays类中一套用于数组的static方法,都是操纵数组实用功能.下面分别介绍. (1) 数组的复制 (2)  ...