ArrayDeque双端队列--底层原理可视化
偻邓抛兆1、FastAPI实现主从表数据接口和SqlAlchemy的数据处理WxPython跨平台开发框架全部采用Python语言进行开发包括后端的内容采用 基于SqlAlchemyPydanticFastApi 的后端框架FastAPI启动后进入Swagger页面如下所示列出每个业务表的相关接口。以上就是常规化的接口包括单个获取、ID存在、条件查询、分页查询、数量查询、增加、删除、更新等标准化接口这些基础类接口一般封装在API的控制器基类中。该后端接口采用统一的接口协议标准协议如下所示。复制代码{success: false,result: T ,targetUrl: string,UnAuthorizedRequest: false,errorInfo: {code: 0,message: string,details: string}}复制代码常规化的接口是结合泛型的方式这样定义可以很好的抽象不同的业务类接口到基类控制器中如下是FastApi 后端的基类控制器定义。image有了上面基类定义好的常规化接口子类只需要继承基类控制器即可获得强大的功能接口了。一般API控制器的子类只需要继承基类就可以了额外增加的接口按常规化的设计函数即可可以参考基类的做法来写各种GET、PUT、DELETE、POST的处理函数。image我们来看看对于产品报价单和明细记录的处理这两个代表不同的业务表我们可以分开管理通过约束他们的记录关系实现主从表弹性化的管理。如对于主表我们在基类接口外定义多两个函数主要就是删除主表的时候同时移除明细记录的关联操作。复制代码from fastapi import APIRouter, Depends, HTTPException, Query, Request, Path, Body..................# 创建路由用于处理自定义接口router APIRouter()router.get(byorderno/{orderno},response_modelAjaxResponse[QuotationDto | None],summary根据报价单编号获取对象信息,dependencies[DependsJwtAuth],)async def find_by_orderno(orderno: Annotated[str | None, Path(description订单编号)],request: Request,db: AsyncSession Depends(get_db),):# ip await get_request_ip(request)item await quotation_crud.get_by_column(db, handno, orderno)item QuotationDto.model_validate(item) if item else Nonereturn AjaxResponse(item)router.delete(quotation-related/{id},response_modelAjaxResponse[bool | None],summary删除报价单及明细信息,dependencies[DependsJwtAuth],)async def delete_quotation_related(id: Annotated[str | None, Path(description报价单ID)],request: Request,db: AsyncSession Depends(get_db),):# ip await get_request_ip(request)#获取记录信息item await quotation_crud.get(db, id)if not item:return AjaxResponse(False)# 删除相关的明细记录res await quotationdetail_crud.delete_by_column(db, orderno, item.handno)if res:# 再删除报价单await quotation_crud.delete_byid(db, id)return AjaxResponse(res)# 使用基类控制器可以继承常规CRUD的接口并自动生成路由依赖注入数据库连接等功能 ——构建方式2controller BaseController[Quotation, str, QuotationPageDto, QuotationDto](quotation_crud,pagedto_classQuotationPageDto,dto_classQuotationDto,routerrouter,)controller.init_router() # 初始化常规CRUD等接口的路由复制代码而报价单明细业务控制器主要需要根据报价单号订单号获取明细的接口复制代码from fastapi import APIRouter, Depends, HTTPException, Query, Request, Path, Bodyfrom typing import Type, TypeVar, Generic, List, Dict, Any, Optional, Annotatedfrom datetime import datetimefrom sqlalchemy.ext.asyncio import AsyncSessionfrom schemas.base import AjaxResponse, ErrorInfo, ListResult, PagedResultfrom api.base_controller import BaseControllerfrom db.session_async import get_dbfrom common.jwt import DependsJwtAuthfrom models.quotationdetail import QuotationDetailfrom schemas.quotationdetail import QuotationDetailDto, QuotationDetailPageDtofrom crud.quotationdetail import quotationdetail as quotationdetail_crudfrom crud.operationlog import operationlog as operationlog_crudfrom utils.request_parse import get_request_ip# 创建路由用于处理自定义接口router APIRouter()router.get(/by-orderno,response_modelAjaxResponse[List[QuotationDetailDto] | None],summary根据订单编号获取记录,dependencies[DependsJwtAuth],)async def get_by_orderno(orderno: Annotated[str | None, Query(description订单编号)],request: Request,db: AsyncSession Depends(get_db),):# ip await get_request_ip(request)items await quotationdetail_crud.get_by_orderno(db, orderno)# print(len(items))items [QuotationDetailDto.model_validate(item) for item in items]return AjaxResponse(items)router.delete(/by-orderno/{orderno},response_modelAjaxResponse[bool | None],summary根据订单编号删除所有明细记录,dependencies[DependsJwtAuth],)async def delete_by_orderno(orderno: Annotated[str | None, Path(description订单编号)],request: Request,db: AsyncSession Depends(get_db),):res await quotationdetail_crud.delete_by_attributes(db, QuotationDetail.orderno orderno)return AjaxResponse(res)# 使用基类控制器可以继承常规CRUD的接口并自动生成路由依赖注入数据库连接等功能controller BaseController[QuotationDetail, str, QuotationDetailPageDto, QuotationDetailDto](quotationdetail_crud,pagedto_classQuotationDetailPageDto,dto_classQuotationDetailDto,routerrouter,)controller.init_router() # 初始化常规CRUD等接口的路由复制代码由于基类控制器接口的标准化我们根据框架后端的接口进行前端API调用类的封装处理从而实现业务基类调用接口的统一封装简化代码。这样增删改查等处理的接口都可以抽象到BaseApi里面了。如对于权限模块我们涉及到的用户管理、机构管理、角色管理、菜单管理、功能管理、操作日志、登录日志等业务类那么这些类继承BaseApi就会具有相关的接口了如下所示继承关系。2、基于SqlAlchemy实现的业务模型FastAPI负责提供数据的API接口底层的数据处理通过SqlAlchemy MongoDB 实现多种数据库的数据管理如对于MySQL、Postgresql、SQLite、Oracle、MongoDB等进行接入和数据交换处理。对于常规的业务表我们采用SqlAlchemy实现数据库的ORM管理的SqlAlchemy也是Python领域中非常强大的ORM管理模块之一, 它让你用 Python 对象来操作数据库而不是手写 SQL 语句。一般我们先定义好模型的基类提供简单的封装image然后在业务类里面继承它即可image报价单的明细表也是类似的image这些模型类和对应接口的DTO类只需要在代码生成工具中进行一键生成就可以了不用编写。在代码生成工具 Database2Sharp 打开数据库列表后右键菜单可以选择生成对应的PythonFastApi后端项目如下界面所示。选中相关的表后一键可以生成各层的类文件其中包括最为繁琐的Model映射类信息。如下是生成的相关类的界面效果。2、WxPthon实现基于Python桌面端主从表的数据处理我们知道一般对于单表来说业务和界面会相对比较简单如下面的界面效果在Windows下客户信息的列表管理和数据编辑界面如下所示。而对于主从表一般除了主业务表外会关联一个到多个的明细表对于报价单来说就只有一个明细表如下所示是具体的界面列表展示。image对于列表的主从表关联关系没有太多好说的就是增加了一个明细表的处理展示对于主从表编辑界面来说就需要复杂处理一些在表格需要直接编辑录入并保存明细的操作处理如下是主从表的编辑界面的实现效果。image其主要就是在第一次创建的时候对表格数据类进行设置image表格的数据直接录入一般不是仅仅的通过文本框的录入一般录入有选择表的记录下拉类表、复选框、图像、数值、颜色等等特殊的录入的。如自定义数据列表选择界面我通过定义一个产品的数据列表展示供选择单击产品编码处弹出一个选择框进行选择。image为了实现对表格数据单元格的单击监控我们绑定了对应的事件。AsyncBind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.on_cell_left_click, self.sub_grid)然后对事件进行实现即可。image下拉列表则是通过绑定固定列表或者字典类型的方式实现字典下拉列表选择image初始化字典列表很容易如下代码所示。image其他案例可以参考测试效果支持多种数据输入处理测试界面效果如下所示。image

相关新闻

ETF 基金估值核算全流程

ETF 基金估值核算全流程

ETF基金估值核算全流程(含数据处理台账/凭证生成) 结合交易所/上清所数据接入、内部数据处理及估值核算核心环节,梳理出从原始数据获取到最终凭证生成的标准化流程,流程以数据流转为核心主线,串联数据导入-清洗-清算-…

2026/7/6 19:50:56 阅读更多 →
2026别错过!千笔,本科生专属降AI神器

2026别错过!千笔,本科生专属降AI神器

在AI技术席卷学术写作的今天,越来越多的学生、研究人员和职场人士选择借助AI辅助完成论文、报告和学术材料。然而,随之而来的“AI率超标”问题却成为横亘在学术道路上的隐形障碍——知网、维普、万方等主流查重系统纷纷升级算法,严打AI生成内…

2026/7/4 16:57:06 阅读更多 →
一篇文章带你搞懂“设计模式”! - - 迭代器模式(16)

一篇文章带你搞懂“设计模式”! - - 迭代器模式(16)

迭代器模式迭代器模式(Iterator Pattern)是常用的设计模式,属于行为型模式如果我们的集合元素是用不同的方式实现的,有数组,还有java的集合类,或者还有其他方式,当客户端要遍历这些集合元素的时候就要使用多种遍历方式…

2026/7/3 12:28:21 阅读更多 →

最新新闻

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
Ubuntu 22.04 实时监控:htop 与 top 的 5 项关键指标深度解析与实战

Ubuntu 22.04 实时监控:htop 与 top 的 5 项关键指标深度解析与实战

Ubuntu 22.04 实时监控:htop 与 top 的 5 项关键指标深度解析与实战当服务器负载突然飙升,或是应用程序响应变慢时,系统管理员的第一反应往往是打开终端查看资源占用情况。在 Ubuntu 22.04 中,top和htop这两个经典工具仍然是诊断性…

2026/7/6 23:59:07 阅读更多 →
msconfig 处理器个数设置详解:从1核到N核的3种应用场景与风险

msconfig 处理器个数设置详解:从1核到N核的3种应用场景与风险

msconfig处理器个数设置深度解析:从原理到实战的完整指南引言:揭开处理器个数设置的神秘面纱在Windows系统的众多隐藏功能中,msconfig中的"处理器个数"设置可能是最常被误解的一个。许多用户误以为这个选项能"开启"更多处…

2026/7/6 23:59:07 阅读更多 →
Java应用红蓝对抗实战:从反序列化漏洞到内存马注入的攻防剖析

Java应用红蓝对抗实战:从反序列化漏洞到内存马注入的攻防剖析

1. 项目概述:为什么Java安全是红蓝对抗的焦点在当前的网络安全攻防演练,也就是我们常说的红蓝对抗中,Java应用一直是双方交锋的核心战场。这不仅仅是因为Java在企业级应用、金融系统和大型互联网后台中无处不在,更因为其技术栈的复…

2026/7/6 23:59:07 阅读更多 →
RHEL 8.10 ISO 镜像下载与验证:3步完成官方订阅账户注册与SHA-256校验

RHEL 8.10 ISO 镜像下载与验证:3步完成官方订阅账户注册与SHA-256校验

RHEL 8.10官方镜像获取与安全验证全流程指南 1. 为什么选择官方渠道获取RHEL镜像? 在企业级Linux发行版中,Red Hat Enterprise Linux(RHEL)因其卓越的稳定性和长期支持而备受青睐。然而,许多技术人员在获取安装镜像时…

2026/7/6 23:57:01 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻