Mysql-Sqlalchemy-ORM-many_to_many
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的更多相关文章
- MySQL之ORM框架SQLAlchemy
一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取 ...
- sqlalchemy orm 操作 MySQL
一.ORM介绍 orm英文全称object relational mapping,是对象映射关系程序,简单来说类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却都是关系型的,为了 ...
- 第二百八十九节,MySQL数据库-ORM之sqlalchemy模块操作数据库
MySQL数据库-ORM之sqlalchemy模块操作数据库 sqlalchemy第三方模块 sqlalchemysqlalchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API ...
- sqlalchemy ORM模块使用介绍
前几天用到了flask框架,所以顺带介绍了flask-sqlalchemy扩展模块,去瞄一眼,由于有好多非web的python程序也用到了数据库,所以今天分享一下sqlalchemy的模块的使用方法. ...
- Python-12-MySQL & sqlalchemy ORM
MySQL MySQL相关文章这里不在赘述,想了解的点击下面的链接: >> MySQL安装 >> 数据库介绍 && MySQL基本使用 >> MyS ...
- sqlalchemy ORM
本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 1. ORM介绍 orm英文全称object ...
- SQLAlchemy ORM之建表与查询
作了最基本的操作,找找感觉.. #coding=utf-8 from datetime import datetime from sqlalchemy import (MetaData, Table, ...
- python 学习笔记十一 SQLALchemy ORM(进阶篇)
SqlAlchemy ORM SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据A ...
- Python-Day12 Python mysql and ORM
一.Mysql数据库 1.什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库, 每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据 ...
- 那些年被我坑过的Python——牵一发动全身 第十一章MySQL、ORM
#!/usr/bin/env python # -*- coding:utf-8 -*- __Author__ = "Zhang Xuyao" from sqlalchemy im ...
随机推荐
- 2.RabbitMq-持久化
RabbitMq-消息持久化 问题:怎样保证消息不因生产者gg而丢失我们知道了如何在消费者的角度保证消息不丢失,但如果生产者gg了呢,消息同样会丢失,生产者gg后会默认丢弃所有的消息,除非告诉它某些消 ...
- dapper通用分页方法
/// <summary> /// dapper通用分页方法 /// </summary> /// <typeparam name="T">泛型 ...
- mac安装phpmysql
1.百度搜“phpmadmin”,还是一样,第二个因为是PC版本,不能用,点击第一个连接,去phpmyadmin的官网. 2.下载完毕后,进入到下载文件保存目录,双击压缩包,压缩包则会自动解压. 3. ...
- 前端知识点回顾之重点篇——ES6的async函数和module
async函数 ES2017 标准引入了 async 函数,使得异步操作变得更加方便. async 函数是 Generator 函数的语法糖 什么是语法糖? 意指那些没有给计算机语言添加新功能,而只是 ...
- 发布机制-灰度发布-例子:Gmail Labs
ylbtech-发布机制-灰度发布-例子:Gmail Labs Gmail Labs是一个新特性橱窗,用户可以自己选择一些未正式发布的新特性进行体验,不喜欢可以关闭,在这个过程中,吃了螃蟹,也当了Go ...
- 映射器Mapping
1) org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping(核心) 将程序员定义的Action所对应的<bean& ...
- 处理输入为非对角阵的Clustering by fast search and find of density peak代码
Clustering by fast search and find of density peak. Alex Rodriguez, Alessandro Laio 是发表在Science上的一篇很 ...
- "挡位"还是"档位",究竟谁错了
http://baijiahao.baidu.com/s?id=1581395663965196858&wfr=spider&for=pc 对于“挡”与“档”两个字,我一直并没有给以太 ...
- PyQt5中QTableWidget设置列宽大小的几种方式
我们在使用QTableWidget的时候,经常会出现列宽大小和我们想象不一致的情况,如下图: 内容不能完全显示,需要手动调整列宽才能显示完全. 还有如下图: 因此需要我们擅于调整列宽为我们所使用,现将 ...
- Swagger 介绍
简介Swagger 是最流行的 API 开发工具,它遵循 OpenAPI Specification(OpenAPI 规范,也简称 OAS).Swagger 可以贯穿于整个 API 生态,如 API ...