SQLAlchemy 多对多关系实战:三种建模方式详解
多对多(Many-to-Many)关系是数据库设计中的经典场景,如学生选课、用户角色、商品标签等。本文通过一个有趣的案例(男生女生组建家庭),深入讲解 SQLAlchemy 中多对多关系的三种实现方式和最佳实践。
一、场景介绍我们将构建一个关系模型:
男生(Boy) ↔ 女生(Girl):多对多关系
家庭(Home):中间表,记录配对关系和家庭信息
业务规则:
一个男生可以和多个女生组建家庭
一个女生可以和多个男生组建家庭
每个家庭有独立的属性(如家庭名称)
二、多对多关系的三种实现方式2.1 方式一:显式中间表(推荐)当中间表需要额外字段时,这是最佳选择。
1234567891011121314151617181920from sqlalchemy import String, Integer, Column, ForeignKey, create_enginefrom sqlalchemy.orm import relationship, declarative_base, create_sessionBase = declarative_base()class Hom ...
SQLAlchemy 一对多关系完整指南:从建模到查询实战
在数据库设计中,一对多(One-to-Many)关系是最常见的关联关系之一。本文将通过一个完整的学校管理系统案例,详细介绍如何使用 SQLAlchemy ORM 实现一对多关系的建模、查询和操作。
一、场景介绍我们将构建一个简单的学校管理系统,包含三层一对多关系:
班级(Class) ↔ 学生(Student):一个班级有多个学生
学生(Student) ↔ 考试(Test):一个学生有多次考试记录
这种层级结构在实际开发中非常常见,可以推广到订单-订单项、部门-员工等场景。
二、模型定义2.1 基础模型类首先定义一个包含时间戳的基类,所有模型都继承自这个基类:
123456789101112131415161718import datetimefrom sqlalchemy import Column, DateTime, JSON, Integer, String, ForeignKeyfrom sqlalchemy.orm import declarative_base, relationshipclass Base(object): created_at = Co ...
Python实现FTP服务器和客户端完整指南
Python实现FTP服务器和客户端完整指南在现代软件开发中,文件传输是一个常见的需求。FTP(File Transfer Protocol)作为经典的文件传输协议,虽然在安全性方面有所不足,但在内网环境或特定场景下仍然被广泛使用。本文将详细介绍如何使用Python实现一个功能完整的FTP服务器和客户端。
FTP协议简介FTP是一种用于在网络上进行文件传输的标准网络协议。它使用客户端-服务器架构,通过TCP协议进行通信,默认使用21端口进行控制连接。
FTP服务器实现依赖安装首先需要安装pyftpdlib库,这是一个功能强大的Python FTP服务器库:
1pip install pyftpdlib
服务器代码实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748import osfrom pyftpdlib.authorizers import DummyAuthorizerfrom pyftpdlib.handlers import FTPHandlerf ...
PyQt5应用在Windows 7环境下的部署完整指南
PyQt5应用在Windows 7环境下的部署完整指南在开发桌面应用程序时,我们经常会遇到这样的挑战:在开发环境中运行良好的PyQt5应用,部署到Windows 7系统后却无法正常启动。本文将详细介绍如何解决PyQt5 + Python 3.8在Windows 7环境下的兼容性问题,包括必要的系统补丁安装和正确的打包工具选择。
问题背景典型错误现象当我们将使用Python 3.8开发的PyQt5应用部署到Windows 7系统时,常见的错误包括:
应用程序无法启动:双击执行文件后没有任何反应
DLL加载失败:提示找不到特定的动态链接库
API版本不兼容:系统提示不支持某些Windows API
Qt平台插件错误:无法加载Qt平台插件
根本原因分析这些问题的根本原因在于:
Python 3.8的依赖要求:Python 3.8使用了较新的Windows API
PyQt5的系统需求:PyQt5依赖特定的系统组件和API
Windows 7的限制:Windows 7缺少某些新的系统组件
核心解决方案1. 安装KB2533623系统补丁KB2533623 (windows6.1-kb2 ...
PyQt5中实现QTableView行拖拽重排序完整指南
PyQt5中实现QTableView行拖拽重排序完整指南在桌面应用开发中,表格控件是最常用的数据展示组件之一。而在现代UI设计中,用户期望能够通过拖拽操作来重新排列表格行的顺序。本文将详细介绍如何在PyQt5中实现QTableView的行拖拽重排序功能,包含完整的代码实现和技术要点分析。
功能概述我们要实现的功能包括:
支持通过鼠标拖拽重新排列表格行
自定义拖拽时的视觉反馈
集成复选框和下拉框等复杂控件
完整的Model-View架构设计
核心实现:自定义QTableView1. ReorderTableView类设计12345678910111213141516171819202122class ReorderTableView(QtWidgets.QTableView): """QTableView with the ability to make the model move a row with drag & drop""" class DropmarkerStyle(QtWidgets.QPr ...
demo
A
aa
bb
a
b
c
纯文本测试
支持简单的 markdown 语法
支持自定义颜色
绿色 + 默认选中
黄色 + 默认选中
青色 + 默认选中
蓝色 + 默认选中
增加
减少
叉
纯文本测试
支持简单的 markdown 语法
支持自定义颜色
绿色
...
GLSL 版本过低 GLSL 1.50 is not supported. Supported
问题:GLSL 版本过低错误信息:1error: GLSL 1.50 is not supported. Supported versions are: 1.10, 1.20
描述:在 Linux 下运行 VTK 时,出现 GLSL 版本过低的问题,导致图形渲染失败。系统的支持版本为 1.10 和 1.20,而所需版本为 GLSL 1.50。
环境:
操作系统:CentOS 7
内核版本:3.10.0-1160.el7.x86_64
解决方案:通过设置环境变量 MESA_GL_VERSION_OVERRIDE,强制指定使用更高版本的 GLSL。例如,设置为 3.3。
执行以下命令来添加环境变量:
1export MESA_GL_VERSION_OVERRIDE=3.3
此环境变量可以在终端中临时设置,或者通过将其添加到 ~/.bashrc 或 ~/.bash_profile 文件中使其永久生效。
使环境变量永久生效:编辑 ~/.bashrc 文件,并在文件末尾添加:
1export MESA_GL_VERSION_OVERRIDE=3.3
然后运行以下命令使其生效:
1sour ...
Win10 添加右键打开CMD菜单
在 Win10 系统下添加右键打开cmd功能。
操作方法脚本1234567891011121314151617181920212223242526272829303132333435363738394041424344Windows Registry Editor Version 5.00 ; Created by: Shawn Brink ; http://www.sevenforums.com ; Tutorial: http://www.sevenforums.com/tutorials/47415-open-command-window-here-administrator.html [-HKEY_CLASSES_ROOT\Directory\shell\runas] [HKEY_CLASSES_ROOT\Directory\shell\runas] @="Open cmd here" "HasL ...
音视频处理-音频提取、字幕生成、视频裁剪、字幕合并
全部使用开源的软件,完成音视频处理。主要包括:
视频裁剪合并
音频提取
根据音频自动生成字幕
音频变声
视频与字幕合并
软件软件详情及版本
HandBrake-1.6.1-x86_64-Win_GUI (视频与字幕合并)
shotcut-win64-230929.exe (视频裁剪、音频视频合成)
Buzz-0.8.4-windows.exe (自动生成字幕)
audacity-win-3.3.3-x64.exe (变声及音频处理)
视频裁剪、导出本章使用 shotcut 软件进行操作
视频切割
导入视频
点 于播放点处切割 按钮
删除多余的视频
视频合并
拖入视频
对齐
视频导出
点击输出
选择视频
只导出音频
点击输出案例
选择 wav 格式
点击输出
导出不含音频的视频
点击这个喇叭静音
重复视频导出操作
字幕生成本章使用的软件为 Buzz
生成字幕
如上所示,选择设置,即可自动生成字幕
此操作很费时,生成的字幕为srt格式
声音编辑本章使用的软件为 audacity
修改声音
选择 效果 -> 音高和速度 -> 改变音高
拖动下 ...
QWebEngine调试JS
本文介绍如何调试嵌入 Pyqt5 中的 QwebEngine 。
环境
Python 3.6.5
pyqt5 5.15.6
pyqtwebengine 5.15.5
huza 0.2.14
步骤添加启动命令在启动的文件后面加入 --remote-debugging-port=8081
端口可以自己指定
打开网页在chrome或者edge 中打开 http://127.0.0.1:8081/ 。如下图所示
点击按钮
点击 demo 就可以进入到调试界面。如下图
在JS中添加日志信息12345678var name_input = document.getElementById("name");var age_input = document.getElementById("age");var jsdata = { 'name': name_input.value, 'age': age_input.value,}console.log(jsdata);
输出如下:
...









