python sqlalchemy 多对多

2023-11-04

# 调用Column创建字段 加类型
from sqlalchemy import Table, Column, Integer,String,DATE, ForeignKey

# 调用操作链接,反查
from sqlalchemy.orm import relationship

# 调用基类Base
from sqlalchemy.ext.declarative import declarative_base

# 调用链接数据库
from sqlalchemy import create_engine

# 会话
from sqlalchemy.orm import sessionmaker

# 生成orm基类
engin = create_engine("mysql+pymysql://root:123456@localhost/aq?charset=utf8",encoding = 'utf-8')
Base = declarative_base() #[dɪˈklærətɪv] 宣言的,公布的
course_class = Table(
    'course_dep',Base.metadata,
    Column('course_id',Integer,ForeignKey('course.id')),
    Column('class_name_id',Integer,ForeignKey('class_name.id'))
)

class Dep(Base):
    __tablename__ = "class_name"

    id = Column(Integer,primary_key=True)
    class_name = Column(String(40),nullable=True)
    class_choice = relationship("Student", backref="choice")
    rela_s = relationship("Course",secondary = course_class,backref = 'c_c')

    def __repr__(self):
        return "< %s %s>" %(self.class_name,self.class_choice)
class Student(Base):
    __tablename__ = "student"

    id = Column(Integer,primary_key=True)
    s_name = Column(String(40),nullable=True)
    cls_id = Column(Integer,ForeignKey("class_name.id"))
    cou_id = Column(Integer,ForeignKey("course.id"))
    # 这个nb,允许你在user表里通过backref字段反向查出所有它在addresses表里的关联项

    def __repr__(self):
        return "< %s %s %s>" %(self.s_name,self.cls_id,self.cou_id)

class Course(Base):
    __tablename__ = "course"

    id = Column(Integer,primary_key=True)
    c_name = Column(String(40),nullable=True)
    class_c = relationship('Student',backref ='ituse')

    def __repr__(self):
        return self.c_name

Base.metadata.create_all(engin)

Session = sessionmaker(bind=engin)
session = Session()

c1 = Dep(class_name = 'c++')
c2 = Dep(class_name = 'go')
c3 = Dep(class_name = 'javascriput')
c4 = Dep(class_name = 'linux')

co1 = Course(c_name = 'base')
co2 = Course(c_name = 'zhongji')
co3 = Course(c_name = 'gaoji')
co4 = Course(c_name = 'dasheng')

c1.rela_s = [co1,co2,co3]
c2.rela_s = [co1,co2,co4]
#session.add_all([c1,c2,c3,c4])

#查询Java有好多人
dep_obj = session.query(Course).filter_by(c_name = 'Base').first()
print(dep_obj.c_name,dep_obj.class_c)

#查询高级课程和初级课程
cou_obj = session.query(Course).filter_by(id = 1).first()
print(cou_obj.course,)

#选alex 选择的什么课程
stu_obj = session.query(Student).filter_by(s_name = 'alex').first()
print(stu_obj.s_name)
session.commit()

 

这个是一个Python sqlalchemy 关系代码:

本人有几个问题不能理解,请大佬解答:

1、在两个表多对多的关系中,

rela_s = relationship("Course",secondary = course_class,backref = 'c_c')

这个关系设定,需要写到那个类中呢?有没有具体的要求呢?

2、在连接查询的时候,怎么查寻

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python sqlalchemy 多对多 的相关文章

  • sy.sympify(str(表达式)) 不等于表达式

    据我了解 str将 SymPy 表达式转换为字符串并sympify将字符串转换为 SymPy 表达式 因此 我希望以下内容成立 对于合理的表达 gt gt gt sy sympify str expr expr True 我尝试过这个 确实
  • Python函数组成

    我尝试使用良好的语法来实现函数组合 这就是我所得到的 from functools import partial class compfunc partial def lshift self y f lambda args kwargs s
  • 烧瓶 - 404 未找到

    我是烧瓶开发的新手 这是我在烧瓶中的第一个程序 但它向我显示了这个错误 在服务器上找不到请求的 URL 如果您输入了网址 请手动检查拼写并重试 这是我的代码 from flask import Flask app Flask name ap
  • Django Web 应用程序中的 SMTP 问题

    我被要求向使用 Django Python 框架实现的现有程序添加一个功能 此功能将允许用户单击一个按钮 该按钮将显示一个小对话框 表单以输入值 我确实编写了一些代码 显示电子邮件已发送的消息 但实际上 它没有发送 My code from
  • 如何仅注释堆积条形图的一个类别

    我有一个数据框示例 如下所示 data Date 2021 07 18 2021 07 19 2021 07 20 2021 07 21 2021 07 22 2021 07 23 Invalid NaN 1 1 NaN NaN NaN N
  • Bokeh 中单独的节点和边缘悬停工具?

    我正在尝试为 Bokeh 中的节点和边缘获取单独的悬停工具提示 但未能使其正常工作 有人可以指出我做错了什么吗 我相信代码应该如下所示 from bokeh io import show output notebook from bokeh
  • Python:“直接”调用方法是否实例化对象?

    我是 Python 新手 在对我的对象进行单元测试时 我注意到一些 奇怪 的东西 class Ape object def init self print ooook def say self s print s def main Ape
  • MYSQL:SQL查询获取自增字段的值

    我有一张桌子 主键是id及其自动递增 现在 当我插入新记录时 我需要获取更新记录的 id 我怎样才能做到这一点 如果我使用查询 select max id from table name 执行后我可以获得id 但我能确定它是刚刚插入的记录的
  • 使用 Windows 任务计划程序安排 [Virtualenv 相关] Python 脚本

    I want to schedule a python script to start at 3AM and break at 5PM every weekday However the problem arises when I need
  • Mysql获取特定表的最后一个id

    我必须从特定的插入表中获取最后的插入 ID 可以说我有这个代码 INSERT INTO blahblah test1 test 2 VALUES test1 test2 INSERT INTO blahblah2 test1 test 2
  • 无需 cron 在后台发送邮件

    我想知道是否有一种方法可以运行 PHP 循环 以便在后台向订阅者发送几百封电子邮件 我的目标是格式化新闻通讯 单击发送 然后关闭浏览器或更改页面 当然 发送电子邮件的实际过程将在后台运行 不会因浏览器关闭而中断 我知道这可以通过 cron
  • Python 或 C 语言中的 Matlab / Octave bwdist()

    有谁知道 Matlab Octave bwdist 函数的 Python 替代品 此函数返回给定矩阵的每个单元格到最近的非零单元格的欧几里得距离 我看到了一个 Octave C 实现 一个纯 Matlab 实现 我想知道是否有人必须用 AN
  • 如何使用MySqlCommand和prepare语句进行多行插入?(#C)

    Mysql 给出了如何使用准备语句和 NET 插入行的示例 http dev mysql com doc refman 5 5 en connector net programming prepared html http dev mysq
  • MySQL中如何存储小数?

    我尝试过将 DECIMAL 与 2 2 一起使用 但它不允许我使用它 我只想存储一个数字 例如 7 50 或 10 50 我需要将这两个数字保留在小数点后 但是当我刷新数据库时 它会将值重置为 0 99 有什么建议么 第一个参数DECIMA
  • 无法将matplotlib安装到pycharm

    我最近开始使用Python速成课程学习Python编程 我陷入困境 因为我无法让 matplotlib 在 pycharm 中工作 我已经安装了pip 我已经通过命令提示符使用 pip 安装了 matplotlib 现在 当我打开 pych
  • 旧版本的 spaCy 在尝试安装模型时抛出“KeyError: 'package'”错误

    我在 Ubuntu 14 04 4 LTS x64 上使用 spaCy 1 6 0 和 python3 5 为了安装 spaCy 的英文版本 我尝试运行 这给了我错误消息 ubun ner 3 NeuroNER master src pyt
  • 在 python 中使用高精度时间戳

    嘿 我正在使用 python 处理日期时间 我想知道解析这个时间戳的最佳方法是什么 时间戳是ISO标准 这里是一个例子 2010 06 19T08 17 14 078685237Z 现在到目前为止我已经使用过 time datetime d
  • OSError: [WinError 193] %1 不是有效的 Win32 应用程序,同时使用 CTypes 在 python 中读取自定义 DLL

    我正在尝试编写用 python 封装 C 库的代码 我计划使用 CTypes 来完成此操作 并使用 Visual Studio 来编译我的 DLL 我从一个简单的函数开始 在 Visual Studio 内的标头中添加了以下内容 然后将其构
  • 当训练和测试的特征数量不同时,如何处理生产环境中的One-Hot Encoding?

    在做某些实验时 我们通常在 70 上进行训练 在 33 上进行测试 但是 当您的模型投入生产时会发生什么 可能会发生以下情况 训练集 Ser Type Of Car 1 Hatchback 2 Sedan 3 Coupe 4 SUV 经过
  • 用 Beautiful Soup 进行抓取:为什么 get_text 方法不返回该元素的文本?

    最近我一直在用 python 开发一个项目 其中涉及抓取一些网站的一些代理 我遇到的问题是 当我尝试抓取某个知名代理站点时 当我要求 Beautiful Soup 查找 IP 在代理表中的位置时 它并没有按照我的预期执行操作 我将尝试查找每

随机推荐

  • 【机器学习】噪声数据的理解

    文章目录 一 噪声数据 1 1 分箱 1 2 回归 1 3 聚类 1 4 其他 二 数据清理作为一个过程 2 1 偏差检测 2 1 1 使用 元数据 关于数据的数据 2 1 2 编码格式 存在使用不一致 数据表示不一致 2 1 3 字段过载
  • C语言编程中的8位、16位、32位整数的分解与合并

    在单片机的编程中对于8位 16位 32位整数的分解与合并用的比较多 今天做了简要学习 后面还需要加以总结 练习在VC 6 0编程环境中进行 源程序 include
  • pikachu靶场--SQL inject--数字型(post)/字符型(get)/搜索型/xx型注入【4.1】~【4.4】

    目录 一 概述 二 数字型注入 post 三 字符型注入 get 四 搜索型注入 以搜索k为例 五 xx型注入 一 概述 在owasp发布的top10排行榜里 注入漏洞一直是危害排名第一的漏洞 其中注入漏洞里面首当其冲的就是数据库注入漏洞
  • python 变量赋值 修改之后 原值改变

    python 是一种动态语言 因此变量的类型和值 在运行时均可改变 当我们将一个变量赋值给另一个变量时 实际上是将变量的引用地址传递给新的变量 这意 味着新旧变量将指向同一个位置 因此 在更改其中一个变量的值时 另一个变量的值也会被更改 i
  • pig对应sql的基本命令

    1 从文件导入数据 1 Mysql Mysql需要先创建表 CREATE TABLE TMP TABLE USER VARCHAR 32 AGEINT IS MALE BOOLEAN CREATE TABLE TMP TABLE 2 AGE
  • 【Java】final关键字的细节注意(八)

    这节内容较简单 而且内容较少 课程源自韩顺平老师的Java课程 final关键字的使用 final的需要注意的细节
  • Android UI 基础-坐标系、角度(弧度)、颜色

    目录 1 坐标系 1 1 屏幕坐标系和数学坐标系的区别 1 2 View的坐标系 1 3 MotionEvent中 get 和 getRaw 的区别 1 4 核心要点 2 角度与弧度 2 1 角度与弧度的定义 2 2 角度和弧度的换算关系
  • linux 进入目录命令

    直接进入计算机目录下 常用指令 cd home 进入 home 目录 cd 返回上一级目录 cd 返回上两级目录 cd 进入个人的主目录 cd user1 进入个人的主目录 cd 返回上次所在的目录 ls 显示文件或目录 l 列出文件详细信
  • 移动端常见meta设置

    1 设置viewport 这句话设置viewport的宽为设备的宽 禁止用户进行缩放 此外 常见参数设置 a width 宽度 数值 device width 默认为980 b height 高度 数值 device height c in
  • 手写一个根据目录自动生成的路由

    文章目录 一 起因 二 思索 三 测试效果 四 项目代码 一 起因 最近研究了一下阿里dva的quickstart 其中路由配置是手动添加 如下 先将要显示的页面导入router js 然后配置 其中path products 是配置的路由
  • 在pycharm中配置变量

    实验目的 python run classifier py task name MRPC do train true do eval true data dir GLUE DIR MRPC vocab file BERT BASE DIR
  • es 索引类型与分词器调整与迁移

    索引最好起别名 方便索引调整 1 创建新索引 PUT index v2 settings number of shards 5 number of replicas 1 mappings doc dynamic strict propert
  • Python爬虫中文乱码问题

    我们在爬虫输出内容时 常常会遇到中文乱码情况 以如下网址为例 https chengdu chashebao com yanglao 19077 html 在输出内容时 出现如下图的情况 解决爬虫中文乱码的步骤 网址编码为gbk 查看网页源
  • shell与shell脚本(一)基本概念与常用的shell命令

    前言 像linux windows等的操作系统 都很大程度上地便利了我们操作计算机的能力 计算机之所以能高效处理用户指令 是因为CPU 更细致地讲 是因为CPU中的内核 也就是我们所说的运算器 控制器和寄存器 当然 我们在使用计算机是 不可
  • 四、同步方法与异步方法及回调函数

    解释一下同步方法与异步方法以及回调函数的关系 若不想很深入的了解这方面内容 可以记住以下结论 对于同时有同步方法和对应异步方法的函数 我们常用异步方法 用独立线程去处理该函数 提高用户的体验 异步方法由于我们需要等待某种事件的发生 例如当前
  • mysql插入数据时,在数据库和表的编码都是utf-8的情况下,还是出现乱码

    Mysql插入数据时 在数据库和表的编码都是utf 8的情况下还是会出现乱码 解决方法 首先先确定自己的数据库的编码是否是utf 8 查看数据库字符集 将sct换为自己的数据库的名字 SHOW CREATE DATABASE sct 会看到
  • vue 项目 基于axios 对常用5种(POST、GET、PUT、DELETE、PATCH)请求进行封装

    一 安装axios 使用 npm npm install axios save 使用 cnpm cnpm install axios save 使用 yarn yarn add axios save 建议使用cnpm 二 src目录下新建l
  • c语言 什么时候需要动态分配内存?

    我讲解一下c语言中动态分配内存的函数 可能有些初学c语言的人不免要问了 我们为什么要通过函数来实现动态分配内存呢 系统难道不是会自动分配内存吗 既然有人会问这样的问题 那么我在这里好好的讲解一下吧 首先让我们熟悉一下计算机的内存吧 在计算机
  • qt中的线程

    目前我暂时会两种线程方式 一种是继承QTHRead 另一种是movetothread 相对二样 第二种好一些 先来介绍一下第一个方法 继承QTHread public A QThread void run 重新run函数 public B
  • python sqlalchemy 多对多

    调用Column创建字段 加类型 from sqlalchemy import Table Column Integer String DATE ForeignKey 调用操作链接 反查 from sqlalchemy orm import