现在来设计一个能描述“图书”与“作者”的关系的表结构,需求是

  1. 一本书可以有好几个作者一起出版
  2. 一个作者可以写好几本书
 #!/usr/bin/env python
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 engine = create_engine("mysql+pymysql://root:root@localhost/testuser?charset=utf8",encoding="utf-8",echo=True)
# 生成orm基类
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") 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 # 构建表结构
Base.metadata.create_all(engine)
#!/usr/bin/env python
from day12 import orm_m2m_fk
from sqlalchemy.orm import sessionmaker # 创建与数据库会话实例。
session_class = sessionmaker(bind=orm_m2m_fk.engine) # 生成session实例
session = session_class() # b1 = orm_m2m_fk.Book(name="Java从入门到精通",pub_date="2018-08-08")
# b2 = orm_m2m_fk.Book(name="Python从入门到精通",pub_date="2018-08-08")
# b3 = orm_m2m_fk.Book(name="JavaScript从入门到精通",pub_date="2018-08-08")
# b4 = orm_m2m_fk.Book(name=".Net从入门到精通",pub_date="2018-08-08")
#
#
# a1 = orm_m2m_fk.Author(name="Jerry")
# a2 = orm_m2m_fk.Author(name="Tom")
# a3 = orm_m2m_fk.Author(name="Jack")
#
# b1.authors = [a1,a3]
#
# b3.authors = [a1,a2,a3]
#
# b2.authors = [a2,a3]
#
# b4.authors = [a1]
#
# session.add_all([b1,b2,b3,b4,a1,a2,a3]) a = session.query(orm_m2m_fk.Author).filter(orm_m2m_fk.Author.name=="Jerry").first()
print(a.books)
session.commit()
 C:\Users\Administrator\AppData\Local\Programs\Python\Python37\python.exe D:/PythonStudy/charm/01/day12/orm_m2m_aip.py
2018-09-20 09:22:14,652 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'sql_mode'
2018-09-20 09:22:14,652 INFO sqlalchemy.engine.base.Engine {}
2018-09-20 09:22:14,656 INFO sqlalchemy.engine.base.Engine SELECT DATABASE()
2018-09-20 09:22:14,656 INFO sqlalchemy.engine.base.Engine {}
2018-09-20 09:22:14,656 INFO sqlalchemy.engine.base.Engine show collation where `Charset` = 'utf8mb4' and `Collation` = 'utf8mb4_bin'
2018-09-20 09:22:14,656 INFO sqlalchemy.engine.base.Engine {}
C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\pymysql\cursors.py:170: Warning: (1366, "Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...' for column 'VARIABLE_VALUE' at row 484")
result = self._query(query)
2018-09-20 09:22:14,658 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS CHAR(60)) AS anon_1
2018-09-20 09:22:14,658 INFO sqlalchemy.engine.base.Engine {}
2018-09-20 09:22:14,658 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS CHAR(60)) AS anon_1
2018-09-20 09:22:14,658 INFO sqlalchemy.engine.base.Engine {}
2018-09-20 09:22:14,659 INFO sqlalchemy.engine.base.Engine SELECT CAST('test collated returns' AS CHAR CHARACTER SET utf8mb4) COLLATE utf8mb4_bin AS anon_1
2018-09-20 09:22:14,659 INFO sqlalchemy.engine.base.Engine {}
2018-09-20 09:22:14,660 INFO sqlalchemy.engine.base.Engine DESCRIBE `book_m2m_author`
2018-09-20 09:22:14,660 INFO sqlalchemy.engine.base.Engine {}
2018-09-20 09:22:14,661 INFO sqlalchemy.engine.base.Engine DESCRIBE `books`
2018-09-20 09:22:14,661 INFO sqlalchemy.engine.base.Engine {}
2018-09-20 09:22:14,663 INFO sqlalchemy.engine.base.Engine DESCRIBE `authors`
2018-09-20 09:22:14,663 INFO sqlalchemy.engine.base.Engine {}
2018-09-20 09:22:14,668 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2018-09-20 09:22:14,668 INFO sqlalchemy.engine.base.Engine SELECT authors.id AS authors_id, authors.name AS authors_name
FROM authors
WHERE authors.name = %(name_1)s
LIMIT %(param_1)s
2018-09-20 09:22:14,669 INFO sqlalchemy.engine.base.Engine {'name_1': 'Jerry', 'param_1': 1}
2018-09-20 09:22:14,670 INFO sqlalchemy.engine.base.Engine SELECT books.id AS books_id, books.name AS books_name, books.pub_date AS books_pub_date
FROM books, book_m2m_author
WHERE %(param_1)s = book_m2m_author.author_id AND books.id = book_m2m_author.book_id
2018-09-20 09:22:14,670 INFO sqlalchemy.engine.base.Engine {'param_1': 1}
[Java从入门到精通, JavaScript从入门到精通, .Net从入门到精通]
2018-09-20 09:22:14,675 INFO sqlalchemy.engine.base.Engine COMMIT Process finished with exit code 0

pythonのsqlalchemy多对多关系的更多相关文章

  1. Python SQLAlchemy多对多外键关联时表结构

    # 创建多对多表结构 from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.engine import cre ...

  2. sqlalchemy 多对多关系

    # -*- coding: utf-8 -*- from sqlalchemy import Column, String, create_engine,ForeignKey,Text,Integer ...

  3. 用SQLAlchemy创建一对多,多对多关系表

    多对多关系表的创建: 如果建立好多对多关系后,我们就可以通过关系名进行循环查找,比如laowang = Teacher.query.filter(Teacher.name=='laowang').fi ...

  4. python3 + flask + sqlalchemy +orm(3):多对多关系

    一篇文章有多个tag,一个tag也可以属于多篇文章,文章和tag存在多对多关系 config.py DEBUG = True #dialect+driver://root:1q2w3e4r5t@127 ...

  5. python测试开发django-32.admin后台多对多关系ManyToManyField

    前言 一本书可以有多个作者,一个作者也可以写多本书,这种关系就是本篇要说的多对多关系. 这种场景在django里面数据库设计时候,需要用到ManyToManyField方法 多对多表设计 auther ...

  6. [ SQLAlchemy ] 自我引用型的多对多关系(Self-Referential Many-to-Many Relationship)理解

    参考: https://www.jianshu.com/p/2c6c76f94b88 https://madmalls.com/blog/post/followers-and-followeds/ 实 ...

  7. python 外键用法 多对多关系 ORM操作 模板相关

    一.app/models中写类(设计表结构) 1.普通类 class  A(models.Model): id=modles.AutoField(primary_key=True) name=mode ...

  8. Linux下开发python django程序(django数据库多对多关系)

    1.多对多关系数据访问 models.py设置 from django.db import models # Create your models here. sex_choices=( ('f',' ...

  9. python使用ORM之如何调用多对多关系

    在models.py中,我创建了两张表,他们分别是作者表和书籍表,且之间的关系是多对多. # 书 class Book(models.Model): id = models.AutoField(pri ...

随机推荐

  1. A. Points in Segments(cf a题, 水题)

    没什么好说的 #include<iostream> using namespace std; ], x, y,n, m, ans; int main(){ cin>>n> ...

  2. (五)Cluster Health

    Let’s start with a basic health check, which we can use to see how our cluster is doing. We’ll be us ...

  3. Framework7 索引列表插件的异步加载实现

    前言 Framework7 作为移动端的开发框架的优良之处已经无需多言.现在已经有了 React 和 Vue 版本,之前在项目中用过 F7 + vue 的开发方式,无论是效率还是产出都近乎完美.有时间 ...

  4. SpringCloud(1)服务注册与发现Eureka

    1.创建1个空白的工程 2.创建2个model工程 一个module(即SpringBoot)工程作为服务注册中心,即Eureka Server,另一个作为Eureka Client. Eureka ...

  5. 数据接口测试工具 Postman 介绍

    此文介绍好用的数据接口测试工具 Postman,能帮助您方便.快速.统一地管理项目中使用以及测试的数据接口. 1. Postman 简介 Postman 一款非常流行的 API 调试工具.其实,开发人 ...

  6. 【学习总结】Git学习-参考廖雪峰老师教程-总

    公元2018-10-21 实验室台式机 win7 64位 参考教程: 廖雪峰Git教程 其他资料:Git-book 北大一只总结的笔记,最终整理的时候可以参考:Git笔记 评论区看到的另一个人,总结在 ...

  7. 第七章· Redis Cluster 核心技术

    Redis Cluster 分布式集群 Redis Cluster 安装部署 Redis Cluster 集群管理操作(核心)

  8. 番外篇-AppService服务

    一. public async Task<ListResultDto<ArchitectureDto>> GetArchitecture() { var architectur ...

  9. 在Django中使用ORM创建图书管理系统

    一.ORM(对象关系映射) 很多语言的web框架中都有这个概念 1. 为什么要有ORM? 1. 写程序离不开数据,要使用数据就需要连接数据库,但是不同的数据库在sql语句上(mysql,oracle等 ...

  10. C#操作session的类实例(转)

    using System.Web; namespace DotNet.Utilities { public static class SessionHelper2 { /// <summary& ...