sqlalchemy多对多查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# coding:utf-8
from sqlalchemy import create_engine, Column, String, Integer, ForeignKey, Table
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship
 
DB_URI = "mysql+pymysql://root:123123sdt@127.0.0.1:3306/xiachufang"
engine = create_engine(DB_URI)
Base = declarative_base(engine)
session = sessionmaker(engine)()
 
# 创建一个多对多的关系(老师与学生的关系)需要创建一个中间表
# 创建一个中间表
teacher_classes = Table(
    "teacher_classes",
    Base.metadata,
    Column("teacher_id", Integer, ForeignKey("teacher.id"), nullable=False, primary_key=True),
    Column("classes_id", Integer, ForeignKey("classes.id"), nullable=False, primary_key=True)
)
 
 
# 创建老师的映射
class Teacher(Base):
    __tablename__ = "teacher"
    id = Column(Integer, primary_key=True, autoincrement=True)
    teacher_name = Column(String(100))
    classes = relationship("Classes", secondary=teacher_classes)
 
    def __repr__(self):
        return "<Teacher id='%s' teacher_name='%s'>" % (self.id, self.teacher_name)
 
 
# 创建学生的映射
class Classes(Base):
    __tablename__ = "classes"
    id = Column(Integer, primary_key=True, autoincrement=True)
    classes_name = Column(String(100))
    teacher = relationship("Teacher", secondary=teacher_classes)
 
    def __repr__(self):
        return "<Classes id='%s' classes_name='%s'>" % (self.id, self.classes_name)
 
#
# # 创建数据库
# Base.metadata.create_all()
 
# # 创建两个老师
# teacher1 = Teacher(teacher_name='admin')
# teacher2 = Teacher(teacher_name='grunt')
# teacher3 = Teacher(teacher_name='shuihen')
 
# # 创建两门课程
# classes1 = Classes(classes_name="java")
# classes2 = Classes(classes_name="python")
#
# # 添加数据
# teacher1.classes = [classes1,classes2]
# teacher2.classes = [classes1,classes2]
# teacher3.classes = [classes1]
# session.add(teacher1)
# session.add(teacher2)
# session.add(teacher3)
# session.commit()
 
# # 查询下数据(根据老师查询课程)
# # teacher = session.query(Teacher).first()
# # print teacher.classes
#
# # 根据课程查询老师
# classes = session.query(Classes).get(1)
# print classes.teacher
#
# # 根据老师查询课程
# teacher = session.query(Teacher).get(3)
# print teacher.classes

  

posted @   CrossPython  阅读(752)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示