python 之sqlalchemy many to many

 1 # -*- coding: utf-8 -*-
 2 """
 3 @author: zengchunyun
 4 """
 5 from sqlalchemy import Column, Integer, String, Float, DateTime, ForeignKey, Table
 6 from sqlalchemy.orm import sessionmaker, relationship, backref
 7 from sqlalchemy.ext.declarative import declarative_base
 8 from sqlalchemy import create_engine
 9
10 Base = declarative_base()
11 engine = create_engine(‘mysql+pymysql://root:[email protected]:3306/day11‘,echo=True)
12
13
14
15 class Association(Base):
16     __tablename__ = ‘association‘
17     left_id = Column(Integer, ForeignKey("left.id"), primary_key=True)
18     right_id = Column(Integer, ForeignKey("right.id"), primary_key=True)
19     extra_data = Column(String(50))
20     child = relationship("Child", back_populates="parents")
21     parent = relationship("Parent", back_populates="children")
22
23
24 class Parent(Base):
25     __tablename__ = ‘left‘
26     id = Column(Integer, primary_key=True)
27     children = relationship("Association", back_populates=‘parent‘)
28
29 class Child(Base):
30     __tablename__ = ‘right‘
31     id = Column(Integer, primary_key=True)
32     parents = relationship("Association", back_populates="child")
33
34
35 Base.metadata.create_all(engine)
36
37 DBSession = sessionmaker()
38 DBSession.configure(bind=engine)
39 session = DBSession()  # 打开数据连接
40
41
42 # 插入数据方式一
43 # p = Parent()
44 # c = Child()
45 # a = Association(extra_data="ss")
46 # a.parent = p
47 # a.child = c
48 # 插入数据方式二
49 c = Child()
50 a = Association(extra_data=‘dd‘)
51 a.parent = Parent()
52 c.parents.append(a)
53
54 # 插入数据方式三
55 # p = Parent()
56 # a = Association(extra_data="some data")
57 # a.child = Child()
58 # p.children.append(a)
59 #
60 # for assoc in p.children:
61 #     print(assoc.extra_data)
62 #     print(assoc.child)
63
64
65 session.add(a)
66 session.commit()

第二种方式

上面的其它代码不变,只修改relationship关系,效果是一样的

 1 class Association(Base):
 2     __tablename__ = ‘association‘
 3     left_id = Column(Integer, ForeignKey("left.id"), primary_key=True)
 4     right_id = Column(Integer, ForeignKey("right.id"), primary_key=True)
 5     extra_data = Column(String(50))
 6     child = relationship("Child", backref="parents")
 7     parent = relationship("Parent", backref="children")
 8
 9
10 class Parent(Base):
11     __tablename__ = ‘left‘
12     id = Column(Integer, primary_key=True)
13
14 class Child(Base):
15     __tablename__ = ‘right‘
16     id = Column(Integer, primary_key=True)
时间: 2024-08-27 18:24:02

python 之sqlalchemy many to many的相关文章

python之sqlalchemy

python之sqlalchemy ORM: ORM框架的作用就是把数据库表的一行记录与一个对象互相做自动转换. 正确使用ORM的前提是了解关系数据库的原理. ORM就是把数据库表的行与相应的对象建立关联,互相转换. 由于关系数据库的多个表还可以用外键实现一对多.多对多等关联,相应地, ORM框架也可以提供两个对象之间的一对多.多对多等功能. 一 单表操作(不涉及一对多,多对多) #coding:utf8 import sqlalchemy from sqlalchemy import crea

【笔记】python的sqlalchemy数据库连接池原理的说明

sqlalchemy数据库连接池的使用方式是延迟初始化,就是说一开始你调用create_engine(...)后创建的那个数据库池是空的,你后面通过session.connection()或者engine.connect()才开始创建连接, 每当你创建一个连接,你调用engine.pool.status()就可以看到数据库连接池处于什么状态,下面说明以下status()的输出说明: 'Pool size: 16  Connections in pool: 1 Current Overflow:

python使用SQLAlchemy模块连接MySQL

ORM技术:Object-Relational Mapping,负责把关系数据库的表结构映射到对象上. 1.安装SQLAlchemy模块 pip install sqlalchemy 2.初始化连接 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 from sqlalchemy import Column, create_engine 5 from sqlalchemy.types import * 6 from sqlalchemy.

python之SQLAlchemy ORM 上

前言: SQLAlchmey是暑假学的,当时学完后也没及时写博客整理下.这篇博客主要介绍下SQLAlchemy及基本操作,写完后有空做个堡垒机小项目.下篇博客整理写篇关于Web框架和django基础~~ 一.ORM介绍 orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却都是关系型的,为了保证一致的使用习惯,通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,这样我们

python的sqlalchemy框架

先看一下sqlalchemy框架中的映射,sqlalchemy一共有三种映射方式:传统映射(classic).现代化映射(modern).自定义映射.在这里,只为大家讲一下classic映射和modern映射. classic映射:顾名思义,就是类似于hibernate那样,要写好多配置文件,这里放一个小例子: #coding=utf-8 from sqlalchemy import Table, MetaData, Column, Integer, String, DateTime   fro

python下SQLAlchemy的使用

SQLAlchemy是python中orm常用的框架.支持各种主流的数据库,如SQLite.MySQL.Postgres.Oracle.MS-SQL.SQLServer 和 Firebird. 在安装好SQLAlchemy之后导入相关的模块,如下是一些常用的模块,也可以根据项目的实际需要在添加. from sqlalchemy import Column, String, create_engine #导入包 from sqlalchemy.orm import sessionmaker fro

关于ORM,以及Python中SQLAlchemy的sessionmaker,scoped_session

orm(object relational mapping):对象关系映射. python面向对象,而数据库是关系型. orm是将数据库关系映射为Python中的对象,不用直接写SQL. 缺点是性能略差. 通过sessionmaker,我们得到一个类,一个能产生session的工厂. 我们可以用这个类的对象来操作数据库.example: from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker # a

python 模块 SQLalchemy

''' # &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

Python 之 sqlalchemy查询数据

表结果: 查询代码: #Author Kang import sqlalchemy from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column,Integer,String from sqlalchemy.orm import sessionmaker #创建对象的基类: Base = declarative_b

python 之sqlalchemy many to one

通过查询多个父亲,对应一个儿子 1 #!/usr/bin/env python3 2 # -*- coding: utf-8 -*- 3 """ 4 @author: zengchunyun 5 """ 6 from sqlalchemy import Column, Integer, String, Float, DateTime, ForeignKey 7 from sqlalchemy.orm import sessionmaker, re