python: SQLAlchemy (ORM) Simple example using SQLite
- 领域层(Domain Laye):定义了
School
实体类和SchoolRepository
抽象基类,明确了业务实体和数据访问的契约。 -
基础设施层(Infrastructure Laye):通过 SQLAlchemy 实现了
SchoolRepository
类,负责与 SQLite 数据库进行交互,包括增删改查操作。 -
应用层(Application Laye):
SchoolService
类封装了业务逻辑,调用SchoolRepository
接口的方法完成具体的业务操作。 -
表现层(Presentation Laye):
SchoolView
类负责创建和管理用户界面,包括搜索框、ttk.Treeview
表格、操作按钮和分页按钮。SchoolController
类处理用户的操作请求,调用SchoolService
完成相应的业务逻辑,并更新视图。
项目结构:
领域层(Domain Laye):
# encoding: utf-8
# 版权所有 2025 ©涂聚文有限公司 ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2023.1 python 3.11
# OS : windows 10
# database : mysql 9.0 sql server 2019, poostgreSQL 17.0 oracle 21c Neo4j
# Datetime : 2025/2/19 20:39
# User : geovindu
# Product : PyCharm
# Project : pySQLiteDDDOrmDemo
# File : domain/entities/school.py
# explain : 学习class School:"""领域层(Domain)"""def __init__(self, school_id, school_name, school_tel_no):""":param school_id::param school_name::param school_tel_no:"""self.school_id = school_idself.school_name = school_nameself.school_tel_no = school_tel_no# encoding: utf-8
# 版权所有 2025 ©涂聚文有限公司 ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2023.1 python 3.11
# OS : windows 10
# database : mysql 9.0 sql server 2019, poostgreSQL 17.0 oracle 21c Neo4j
# Datetime : 2025/2/19 20:40
# User : geovindu
# Product : PyCharm
# Project : pySQLiteDDDOrmDemo
# File : domain/repositories/schoolRepositories.py
# explain : 学习
from abc import ABC, abstractmethod
from typing import List
from ..entities.school import Schoolclass SchoolRepository(ABC):"""领域层(Domain) 接口"""@abstractmethoddef add(self, school: School):""":param school::return:"""pass@abstractmethoddef update(self, school: School):""":param school::return:"""pass@abstractmethoddef delete(self, school_id: str):""":param school_id::return:"""pass@abstractmethoddef get_all(self, page: int, page_size: int, search_query: str = "") -> List[School]:""":param page::param page_size::param search_query::return:"""pass@abstractmethoddef get_total_count(self, search_query: str = "") -> int:""":param search_query::return:"""pass
基础设施层(Infrastructure Laye):
# encoding: utf-8
# 版权所有 2025 涂聚文有限公司
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2023.1 python 3.11
# os : windows 10
# database : mysql 9.0 sql server 2019, poostgreSQL 17.0 Oracle 21c
# Datetime : 2025/2/19 21:30
# User : geovindu
# Product : PyCharm
# Project : pySQLiteDDDOrmDemo
# File : school.py
# explain : 学习from sqlalchemy import create_engine, Column, String
from sqlalchemy.orm import sessionmaker, declarative_base
from domain.entities.school import School
from ..database.sqlitehelper import SqliteHelperBase = declarative_base()class SchoolModel(Base):"""基础设施层(Infrastructure)"""__tablename__ = 'School'SchoolId = Column(String, primary_key=True)SchoolName = Column(String, nullable=False)SchoolTelNo = Column(String, nullable=False)# encoding: utf-8
# 版权所有 2025 ©涂聚文有限公司 ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2023.1 python 3.11
# OS : windows 10
# database : mysql 9.0 sql server 2019, poostgreSQL 17.0 oracle 21c Neo4j
# Datetime : 2025/2/19 21:41
# User : geovindu
# Product : PyCharm
# Project : pySQLiteDDDOrmDemo
# File : school.py
# explain : 学习from sqlalchemy import create_engine, Column, String
from sqlalchemy.orm import sessionmaker, declarative_base
from domain.entities.school import School
from ..database.sqlitehelper import SqliteHelper
from ..model.school import SchoolModelclass SchoolRepository:"""基础设施层(Infrastructure)"""def __init__(self):""""""self._session = SqliteHelper() # Session()def add(self, school: School):""":param school::return:"""session = self._session.getSession() # Session() #school_model = SchoolModel(SchoolId=school.school_id, SchoolName=school.school_name,SchoolTelNo=school.school_tel_no)session.add(school_model)session.commit()session.close()def update(self, school: School):""":param school::return:"""session = self._session.getSession() # Session() #school_model = session.query(SchoolModel).filter_by(SchoolId=school.school_id).first()if school_model:school_model.SchoolName = school.school_nameschool_model.SchoolTelNo = school.school_tel_nosession.commit()session.close()def delete(self, school_id: str):""":param school_id::return:"""session = self._session.getSession() # Session() #school_model = session.query(SchoolModel).filter_by(SchoolId=school_id).first()if school_model:session.delete(school_model)session.commit()session.close()def get_all(self, page: int, page_size: int, search_query: str = ""):""":param page::param page_size::param search_query::return:"""session = self._session.getSession() # Session() #query = session.query(SchoolModel)if search_query:query = query.filter((SchoolModel.SchoolId.contains(search_query)) |(SchoolModel.SchoolName.contains(search_query)) |(SchoolModel.SchoolTelNo.contains(search_query)))offset = (page - 1) * page_sizeschool_models = query.offset(offset).limit(page_size).all()session.close()return [School(school.SchoolId, school.SchoolName, school.SchoolTelNo) for school in school_models]def get_total_count(self, search_query: str = ""):""":param search_query::return:"""session = self._session.getSession() # Session() #query = session.query(SchoolModel)if search_query:query = query.filter((SchoolModel.SchoolId.contains(search_query)) |(SchoolModel.SchoolName.contains(search_query)) |(SchoolModel.SchoolTelNo.contains(search_query)))count = query.count()session.close()return count
应用层(Application Laye):
# encoding: utf-8
# 版权所有 2025 ©涂聚文有限公司 ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2023.1 python 3.11
# OS : windows 10
# database : mysql 9.0 sql server 2019, poostgreSQL 17.0 oracle 21c Neo4j
# Datetime : 2025/2/19 21:10
# User : geovindu
# Product : PyCharm
# Project : pySQLiteDDDOrmDemo
# File : application/services/schoolServices.py
# explain : 学习from typing import List
from domain.entities.school import School
from domain.repositories.schoolRepositories import SchoolRepositoryclass SchoolService:"""应用层(Application)"""def __init__(self, repository: SchoolRepository):""":param repository:"""self.repository = repositorydef add_school(self, school: School):""":param school::return:"""self.repository.add(school)def update_school(self, school: School):""":param school::return:"""self.repository.update(school)def delete_school(self, school_id: str):""":param school_id::return:"""self.repository.delete(school_id)def get_schools(self, page: int, page_size: int, search_query: str = "") -> List[School]:""":param page::param page_size::param search_query::return:"""return self.repository.get_all(page, page_size, search_query)def get_total_count(self, search_query: str = "") -> int:""":param search_query::return:"""return self.repository.get_total_count(search_query)
表现层(Presentation Laye):
# encoding: utf-8
# 版权所有 2025 ©涂聚文有限公司 ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2023.1 python 3.11
# OS : windows 10
# database : mysql 9.0 sql server 2019, poostgreSQL 17.0 oracle 21c Neo4j
# Datetime : 2025/2/19 18:46
# User : geovindu
# Product : PyCharm
# Project : pySQLiteDDDOrmDemo
# File : presentation/views/schoolViews.py
# explain : 学习import tkinter as tk
from tkinter import ttkclass SchoolView:"""表现层(Presentation) UI"""def __init__(self, root):self.root = rootself.root.title("School Management")# 搜索框self.search_frame = ttk.Frame(root)self.search_frame.pack(pady=10)self.search_entry = ttk.Entry(self.search_frame)self.search_entry.pack(side=tk.LEFT, padx=5)self.search_button = ttk.Button(self.search_frame, text="Search")self.search_button.pack(side=tk.LEFT)# Treeviewself.tree = ttk.Treeview(root, columns=('SchoolId', 'SchoolName', 'SchoolTelNo'), show='headings')self.tree.heading('SchoolId', text='School ID')self.tree.heading('SchoolName', text='School Name')self.tree.heading('SchoolTelNo', text='School Tel No')self.tree.pack(pady=10)# 操作按钮self.button_frame = ttk.Frame(root)self.button_frame.pack(pady=10)self.add_button = ttk.Button(self.button_frame, text="Add")self.add_button.pack(side=tk.LEFT, padx=5)self.edit_button = ttk.Button(self.button_frame, text="Edit")self.edit_button.pack(side=tk.LEFT, padx=5)self.delete_button = ttk.Button(self.button_frame, text="Delete")self.delete_button.pack(side=tk.LEFT, padx=5)# 分页按钮self.pagination_frame = ttk.Frame(root)self.pagination_frame.pack(pady=10)self.prev_button = ttk.Button(self.pagination_frame, text="Previous")self.prev_button.pack(side=tk.LEFT, padx=5)self.page_label = ttk.Label(self.pagination_frame, text="Page 1 of 1")self.page_label.pack(side=tk.LEFT, padx=5)self.next_button = ttk.Button(self.pagination_frame, text="Next")self.next_button.pack(side=tk.LEFT, padx=5)def clear_tree(self):for item in self.tree.get_children():self.tree.delete(item)def populate_tree(self, schools):for school in schools:self.tree.insert('', 'end', values=(school.school_id, school.school_name, school.school_tel_no))def update_page_label(self, current_page, total_pages):self.page_label.config(text=f"Page {current_page} of {total_pages}")def open_add_window(self, save_callback):top = tk.Toplevel(self.root)top.title("Add School")ttk.Label(top, text="School ID:").grid(row=0, column=0, padx=5, pady=5)id_entry = ttk.Entry(top)id_entry.grid(row=0, column=1, padx=5, pady=5)ttk.Label(top, text="School Name:").grid(row=1, column=0, padx=5, pady=5)name_entry = ttk.Entry(top)name_entry.grid(row=1, column=1, padx=5, pady=5)ttk.Label(top, text="School Tel No:").grid(row=2, column=0, padx=5, pady=5)tel_entry = ttk.Entry(top)tel_entry.grid(row=2, column=1, padx=5, pady=5)def save_school():school_id = id_entry.get()school_name = name_entry.get()school_tel_no = tel_entry.get()if school_id and school_name and school_tel_no:save_callback(school_id, school_name, school_tel_no)top.destroy()ttk.Button(top, text="Save", command=save_school).grid(row=3, column=0, columnspan=2, pady=10)def open_edit_window(self, school_id, school_name, school_tel_no, update_callback):top = tk.Toplevel(self.root)top.title("Edit School")ttk.Label(top, text="School ID:").grid(row=0, column=0, padx=5, pady=5)id_entry = ttk.Entry(top)id_entry.insert(0, school_id)id_entry.config(state='readonly')id_entry.grid(row=0, column=1, padx=5, pady=5)ttk.Label(top, text="School Name:").grid(row=1, column=0, padx=5, pady=5)name_entry = ttk.Entry(top)name_entry.insert(0, school_name)name_entry.grid(row=1, column=1, padx=5, pady=5)ttk.Label(top, text="School Tel No:").grid(row=2, column=0, padx=5, pady=5)tel_entry = ttk.Entry(top)tel_entry.insert(0, school_tel_no)tel_entry.grid(row=2, column=1, padx=5, pady=5)def update_school():new_school_name = name_entry.get()new_school_tel_no = tel_entry.get()if new_school_name and new_school_tel_no:update_callback(school_id, new_school_name, new_school_tel_no)top.destroy()ttk.Button(top, text="Update", command=update_school).grid(row=3, column=0, columnspan=2, pady=10)# encoding: utf-8
# 版权所有 2025 ©涂聚文有限公司 ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述: controllers views 可以分开
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2023.1 python 3.11
# OS : windows 10
# database : mysql 9.0 sql server 2019, poostgreSQL 17.0 oracle 21c Neo4j
# Datetime : 2025/2/19 21:48
# User : geovindu
# Product : PyCharm
# Project : pySQLiteDDDOrmDemo
# File : presentation/controllers/schoolControllers.py
# explain : 学习import tkinter as tk
from application.services.schoolServices import SchoolService
from domain.entities.school import Schoolclass SchoolController:"""表现层(Presentation)"""def __init__(self, service: SchoolService, view):""":param service::param view:"""self.service = serviceself.view = viewself.current_page = 1self.page_size = 10self.search_query = ""self.total_pages = 1self.view.search_button.config(command=self.search)self.view.add_button.config(command=self.add)self.view.edit_button.config(command=self.edit)self.view.delete_button.config(command=self.delete)self.view.prev_button.config(command=self.prev_page)self.view.next_button.config(command=self.next_page)self.load_data()def load_data(self):""":return:"""schools = self.service.get_schools(self.current_page, self.page_size, self.search_query)total_count = self.service.get_total_count(self.search_query)self.total_pages = (total_count + self.page_size - 1) // self.page_sizeself.view.clear_tree()self.view.populate_tree(schools)self.view.update_page_label(self.current_page, self.total_pages)self.view.prev_button.config(state=tk.NORMAL if self.current_page > 1 else tk.DISABLED)self.view.next_button.config(state=tk.NORMAL if self.current_page < self.total_pages else tk.DISABLED)def search(self):""":return:"""self.search_query = self.view.search_entry.get()self.current_page = 1self.load_data()def add(self):""":return:"""def save_callback(school_id, school_name, school_tel_no):new_school = School(school_id, school_name, school_tel_no)self.service.add_school(new_school)self.load_data()self.view.open_add_window(save_callback)def edit(self):""":return:"""selected_item = self.view.tree.selection()if selected_item:values = self.view.tree.item(selected_item, 'values')school_id, school_name, school_tel_no = valuesdef update_callback(school_id, new_school_name, new_school_tel_no):updated_school = School(school_id, new_school_name, new_school_tel_no)self.service.update_school(updated_school)self.load_data()self.view.open_edit_window(school_id, school_name, school_tel_no, update_callback)def delete(self):""":return:"""selected_item = self.view.tree.selection()if selected_item:school_id = self.view.tree.item(selected_item, 'values')[0]self.service.delete_school(school_id)self.load_data()def prev_page(self):"""下一页:return:"""if self.current_page > 1:self.current_page -= 1self.load_data()def next_page(self):"""上一页:return:"""if self.current_page < self.total_pages:self.current_page += 1self.load_data()
调用:
# encoding: utf-8
# 版权所有 2025 涂聚文有限公司
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述: Object-Relational Mapping (ORM)
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2023.1 python 3.11
# os : windows 10
# database : mysql 9.0 sql server 2019, poostgreSQL 17.0 Oracle 21c
# Datetime : 2025/2/19 21:02
# User : geovindu
# Product : PyCharm
# Project : pySQLiteDDDOrmDemo
# File : main.py
# explain : 学习
import tkinter as tkfrom Infrastructure.repository.school import SchoolRepository
from application.services.schoolServices import SchoolService
from presentation.views.schoolViews import SchoolView
from presentation.controllers.schoolControllers import SchoolControllerif __name__ == '__main__':""""""root = tk.Tk()repository = SchoolRepository()service = SchoolService(repository)view = SchoolView(root)controller = SchoolController(service, view)root.iconbitmap("favicon.ico")root.mainloop()print('PyCharm,geovindu,Geovin Du,塗聚文,涂聚文')
输出:
相关文章:
python: SQLAlchemy (ORM) Simple example using SQLite
领域层(Domain Laye):定义了 School 实体类和 SchoolRepository 抽象基类,明确了业务实体和数据访问的契约。 基础设施层(Infrastructure Laye):通过 SQLAlchemy 实现了 SchoolRepository 类&am…...
MySQL 视图入门
一、什么是 MySQL 视图 1.1 视图的基本概念 在 MySQL 中,视图是一种虚拟表,它本身并不存储实际的数据,而是基于一个或多个真实表(基表)的查询结果集。可以把视图想象成是一个预定义好的查询语句的快捷方式。当你查询…...
【洛谷排序算法】P1012拼数-详细讲解
这道题本质上是通过确定数字的拼接顺序来得到最大拼接数,虽然主要思路是利用字符串及其比较规则来实现,但也可以基于数组结合一些转换操作来解决,以下是大致思路和代码示例: 【算法思路】 首先将输入的数字存储在数组中。然后自…...
在WPS中设置word的页码不从第一页开始,从指定页开始插入页码
大家好,我是小鱼。 在日常的办公中为Word文档页面插入页码是经常要做的。如果一个文档有几十页,插入页码不仅可以快速定位到文章的内容,如果需要制作目录也方便制作。正确情况下插入页码都是从第一页开始的,但是有些文档比如说标…...
鸿蒙app 开发中 对于数组方法 filter 的理解
这段代码是 TypeScript 中数组 filter 方法的类型定义,下面将详细解释其各个部分的含义、作用及使用场景。 整体功能概述 filter 方法是 JavaScript 和 TypeScript 中数组对象的一个内置方法,它的主要功能是创建一个新数组,新数组中的元素是…...
【废物研究生刷算法】字符串
文章目录 1. 反转字符串2. 替换数字3. 反转字符串中的单词4. 右旋字符串总结1、字符串处理函数2、字符串切片 如果使用python处理字符串,有很多py内置的函数可以使用,主要还是记住这些处理方法。 1. 反转字符串 class Solution:def reverseStr(self, s, …...
深入理解 SQL 注入漏洞及解决方案
一、引言 在当今数字化时代,数据库作为存储和管理数据的核心组件,其安全性至关重要。SQL 注入是一种常见且极具威胁性的数据库安全漏洞,它可能导致数据泄露、篡改甚至系统被完全控制。本文将深入探讨 SQL 注入漏洞的产生原因、表现形式以及如…...
Next.js 学习-1
Next.js学习 引用:https://www.nextjs.cn/learn/basics/create-nextjs-app 先试试水吧,正好dify用的这个构建的前端项目。 使用 如果您尚未安装 Node.js,请 从此处安装。要求 Node.js 10.13 或更高版本。 好吧得用新的了,记得…...
[ComfyUI]Recraft贴图开源方案,实现服装印花自由
一、介绍 今天发现了一个简单又好用的插件,可以实现类似Recraft的贴图功能,这是一个作者开发的ComfyUI插件,叫做Comfyui-Transform 这个插件比我们简单的图像覆盖多了一些可控参数,形状、透明度、倾斜、拉升和混合模式等诸多可控…...
JavaScript 数组连接方法
在 JavaScript 中,有多种方法可以连接数组。每种方法都有其自身的优点和缺点。常见的方法包括 concat()、扩展运算符(...)、push()、splice()、slice()、join()、forEach()、reduce() 以及 Array.from() 等。下面是这些方法的详细说明和示例代码。 1. concat() co…...
Windows安装MySQL教程
1.下载 下载地址:https://www.mysql.com/downloads/ 下载版本:MySQL Installer for Window 2.安装MySQL 以下只列出需要注意的一些界面,没出现的界面默认继续即可。 1.选择安装类型 提供了多种安装模式,包括默认开发版、仅…...
VOS3000线路对接、路由配置与路由分析操作教程
一、VOS3000简介 VOS3000是一款常用的VoIP运营平台,支持多种线路对接和路由配置,适合新手快速上手。本教程将带你了解如何对接线路、配置路由以及进行路由分析。 二、线路对接 准备工作 获取线路信息:从供应商处获取线路的IP地址、端口、用…...
PiscTrace的开发者版
基于 PiscTrace 架构的视图处理的纯开发板,支持静态图片、实时视频流、摄像头视频流和网络视频流的处理。与 PiscTrace 应用版相比,开发者版通过直接的代码开发,提供了更高的灵活性和可定制性,适用于需要深度定制和复杂处理的应用…...
OnlyOffice:前端编辑器与后端API实现高效办公
OnlyOffice:前端编辑器与后端API实现高效办公 一、OnlyOffice概述二、前端编辑器:高效、灵活且易用1. 完善的编辑功能2. 实时协作支持3. 自动保存与版本管理4. 高度自定义的界面 三、后端API:管理文档、用户与权限1. 轻松集成与定制2. 实时协…...
github 怎么创建一个私有repository 并从另外一台电脑拉取下来更新
1.github上新建一个repository 设置为private tips删除在这 点setting 然后往下拖动 会有个这里是用来删项目的 2.另外 一台电脑拉取这个repository的时候 需要配置 一个ssh key 这个key的内容生成参考本地电脑的生成 然后在这配置 2.1 生成 SSH 密钥(如果还没有…...
本周行情——250222
本周A股行情展望与策略 结合近期盘面特征及市场主线演化,本周A股预计延续结构性分化行情,科技成长与政策催化板块仍是资金主战场,但需警惕高标股分歧带来的波动。以下是具体分析与策略建议: 1. 行情核心驱动因素 主线延续性&…...
分发糖果(力扣135)
题目说相邻的两个孩子中评分更高的孩子获得的糖果更多,表示我们既要考虑到跟左边的孩子比较,也要考虑右边的孩子,但是我们如果两边一起考虑一定会顾此失彼。这里就引入一个思想:先满足右边大于左边时的糖果分发情况,再…...
QML ToolButton与DelayButton的使用、详解与自定义样式
QML MenuBarItem与MenuItem的使用、详解与自定义样式 一、介绍1、ToolButton常见用法基础示例设置图标 常用属性texticonenabledshortcutcheckable & checked 信号onClickedonPressed 和 onReleased 样式和外观使用场景 2、DelayButton使用场景核心属性1. delay 核心信号1.…...
动态规划
简介 动态规划最核心两步: 状态表示:dp[i]代表什么状态转移方程:如何利用已有的dp求解dp[i] 只要这两步搞对了, 就完成了动态规划的%95 剩下的就是细节问题: dp初始化顺序(有时是倒序)处理边…...
SQL FIRST() 函数详解
SQL FIRST() 函数详解 在SQL中,FIRST() 函数是一个用于处理查询结果的聚合函数。它通常与 GROUP BY 子句结合使用,用于返回每个分组中的第一个记录。本文将详细解释 FIRST() 函数的用法、参数、返回值以及与它的关联函数。 1. 函数概述 FIRST() 函数的…...
ClickHouse系列之ClickHouse安装
ClickHouse系列之ClickHouse安装 1 ClickHouse2 Docker安装ClickHouse2.1 docker 启动脚本2.2 默认用户及密码2.3 8123和9000端口的作用2.3.1 81232.3.2 9000 3 Clickhouse连接3.1 命令行客户端连接3.1.1 常见的客户端脚本3.1.1.1 查看数据库:show databases;3.1.1.…...
大模型监督微调(SFT)技术解析
大模型监督微调(SFT)技术深度解析 一、基本知识介绍 监督微调(Supervised Fine-Tuning)是连接预训练与具体应用的关键技术层。其本质是通过特定任务的标注数据,在保持预训练模型核心能力的前提下,调整模型…...
PTA: 有序顺序表的合并
请设计一个能够将有序顺序表LA,LB进行合并的算法,要求合并后的顺序表LC依然有序。 例如: LA的元素 1 3 5 7 LB的元素 2 4 LC的元素 1 2 3 4 5 7 其中,LA和LB的长度不超过1000,当中的元素为非递减排序。 输入格式: 第…...
Vuetify解决与旧版浏览器(如Internet Explorer 11)的兼容性问题
简介 由于Vuetify使用了ES2015/2017的特性,这些特性在旧版浏览器中可能不被支持,因此需要通过配置来确保这些特性能够被正确转换。 配置1 在项目项目根目录下的vue.config.js文件,或nuxt.config.ts中,添加 transpileDependencies …...
android,flutter 混合开发,pigeon通信,传参
文章目录 app效果native和flutter通信的基础知识1. 编解码器 一致性和完整性,安全性,性能优化2. android代码3. dart代码 1. 创建flutter_module2.修改 Android 项目的 settings.gradle,添加 Flutter module3. 在 Android app 的 build.gradl…...
Shell文档归档、压缩与解压
Shell文档归档、压缩与解压 1、文件归档与压缩2、zip、gzip与tar指令2.1、zip指令2.2、gzip指令2.3、tar指令 1、文件归档与压缩 归档文件是指将一组文件或目录保存到一个文件中;压缩文件是指将一组文件或目录按照某种存储格式保存到一个文件中,所占磁盘…...
【Bluedroid】AVRCP 连接源码分析(一)
一、AVRCP协议简介 AVRCP(Audio/Video Remote Control Profile)是蓝牙协议栈中的一个重要部分,它定义了蓝牙设备之间的音视频传输控制的流程和特点。AVRCP使得用户可以通过一个蓝牙设备(如手机)远程控制另一个蓝牙设备(如蓝牙耳机或音箱)上的音视频播放,如播放、暂停、…...
CMake入门
1.什么是CMake Makefile想必大家都不陌生吧,它能够解决我们的自动化编译问题,大多是IDE软件都集成了make,譬如 Visual C的 nmake、linux 下的 GNU make、Qt 的 qmake 等等。 不同的IDE所集成的make工具所遵循的规范和标准都不同,也…...
基于vite6创建项目
pnpm create vue vite已自动配置路径,在.config.js jsconfig.json 中 按需引用element-plus 官网中有 pnpm install element-plus npm install -D unplugin-vue-components unplugin-auto-import // vite.config.ts import { defineConfig } from vite import Aut…...
简单封装一个websocket构造函数
问题描述 最近维护一个老项目,发现项目中有大量重复代码,特别是websocket的调用这一块,同样的代码复制了十几个页面,于是自己封装了一个websocket调用的构造函数。 export default class CreateWebSocket {constructor(url) {//…...
大模型产品Deepseek(八)、数据嵌入+知识库管理+联网搜索,实现精准的知识查询
如何将数据嵌入到DeepSeek中以实现精准的知识查询 1. 目标 DeepSeek是一个强大的基于大模型的知识查询工具,能够通过数据嵌入和智能查询功能提供精确的答案。本文将详细介绍如何在DeepSeek中进行数据嵌入,以便最大化其在实际应用中的价值。 2. 推荐使用的Page Assist插件 …...
探索Vue:数字翻滚动画的实现与优化
在前端开发中,动画效果总能为用户界面增添一抹生动与趣味。今天,我们将深入剖析一个基于Vue 3实现的数字翻滚动画组件,从代码结构到功能实现,再到性能优化,一步步揭开它的神秘面纱。 组件概述 这个Vue组件名为Number…...
POI pptx转图片
前言 ppt页面预览一直是个问题,office本身虽然有预览功能但是收费,一些开源的项目的预览又不太好用,例如开源的:kkfileview pptx转图片 1. 引入pom依赖 我这个项目比较老,使用版本较旧 <dependency><gro…...
力扣LeetCode: 2506 统计相似字符串对的数目
题目: 给你一个下标从 0 开始的字符串数组 words 。 如果两个字符串由相同的字符组成,则认为这两个字符串 相似 。 例如,"abca" 和 "cba" 相似,因为它们都由字符 a、b、c 组成。然而,"aba…...
DeepSeek模型量化
技术背景 大语言模型(Large Language Model,LLM),可以通过量化(Quantization)操作来节约内存/显存的使用,并且降低了通讯开销,进而达到加速模型推理的效果。常见的就是把Float16的浮…...
如何调整CAN位宽容忍度?
CAN位宽容忍度是指在控制器局域网络(CAN, Controller Area Network)中允许时钟同步的误差范围。这是CAN网络正常通信时的关键因素之一,因为CAN协议依赖位同步来确保多个节点在总线上正确解码数据。CAN位宽容忍度确保节点之间由于时钟偏差或抖…...
Versal - 基础6(Linux 开发 AIE-ML + 自动化脚本解析)
目录 1. 简介 2. 步骤解析 2.1 概览 2.1.1 步骤依赖关系 2.1.2 总目录结构 2.2 Vitis XPFM 2.2.1 Dir 2.2.2 Makefile 2.2.3 vitis_pfm.py 2.3 Kernels 2.3.1 Dir 2.3.2 Makefile 2.3.3 config 文件 2.4 AIE_app 2.4.1 Dir 2.4.2 Makefile 2.4.3 aie 要点 2.…...
乐享数科:供应链金融—三个不同阶段的融资模式
供应链金融是与产业链紧密结合的融资模式,它主要体现在订单采购、存货保管、销售回款这三个不同的业务阶段,并针对这些阶段提供了相应的金融服务。以下是这三个阶段中主要的融资模式及其特点: 供应链金融融资模式主要分为以下几种࿱…...
vmware虚拟机Ubuntu Desktop系统怎么和我的电脑相互复制文件、内容
1、先安装vmware workstation 17 player,然后再安装Ubuntu Desktop虚拟机,然后再安装vmware tools,具体可以参考如下视频: VMware虚拟机与主机实现文件共享,其实一点也不难_哔哩哔哩_bilibili 2、本人亲自试过了&…...
【React】React 基础(2)
JSX 是什么 JSX是一种 JavaScript 的语法扩展(extension), 也在很多地方称之为 JavaScript XML, 因为看起就是一段XML语法。它用于描述我们的Ul界面,并且其完成可以和 JavaScript 融合在一起使用; 为什么 React 选择使用 jsx? React 认为渲…...
DeepSeek接入Siri(已升级支持苹果手表)完整版硅基流动DeepSeek-R1部署
DeepSeek接入Siri(已升级支持苹果手表)完整版硅基流动DeepSeek-R1部署 **DeepSeek** 是一款专注于深度学习和人工智能的工具或平台,通常与人工智能、机器学习、自动化分析等领域有关。它的主要功能可能包括:深度学习模型搜索&…...
ASP.NET MVC AJAX 文件上传
如何使用 MVC 5 和 AJAX(.NET Framework)上传文件。 使用AJAX和ASP.NET MVC 上传文件 再简单不过了。对于最纯粹的人来说,这不需要使用jQuery。此代码实际上允许上传多个文件。 注意:以下代码示例支持 ASP.NET MVC 5。如果使用 .…...
npm使用了代理,但是代理软件已经关闭导致创建失败
如果在关闭前打开了vscode,此时vscode中的终端没有刷新,就会出现这个问题,最开始会一直转圈圈,直到超时,然后出现该报错 ❯ npm create vuelatest npm error code ECONNREFUSED npm error syscall connect npm error …...
Spring Boot定时任务原理
Spring Boot定时任务原理 在现代应用中,定时任务的调度是实现周期性操作的关键机制。Spring Boot 提供了强大的定时任务支持,通过注解驱动的方式,开发者可以轻松地为方法添加定时任务功能。本文将深入探讨 Spring Boot 中定时任务的实现原理…...
公文派2025:免费社区版重大安装更新!
大家好,感谢对「公文派」的支持。 距离上一次更新已经过去了将近一年的时间,今天我们带来了全新的免费2025社区版,该版本也是目前最新的版本,无需授权即可使用所有的功能。 我们先来看下本版本的更新及特色功能 聚合多个AI功能…...
Ubuntu24.04LTS的下载安装超细图文教程(VMware虚拟机及正常安装)
😸个人主页👉:神兽汤姆猫 📖系列专栏:开发语言环境配置 、 Java学习 、Java面试 、Markdown等 学习上的每一次进步,均来自于平时的努力与坚持。 💕如果此篇文章对您有帮助的话,请点…...
ES6相关操作
一.JavaScript的基础语法 1.Demo1.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>JavaScrip…...
【运维】源码编译安装cmake
背景: 已经在本地源码编译安装gcc/g,现在源码安装cmake 下载源码 下载地址:CMake - Upgrade Your Software Build System 安装步骤: ./bootstrap --prefix/usr/local/cmake make make install 错误处理 1、提示找不到libmpc.…...
代码随想录_回溯
代码随想录_回溯 回溯 77.组合 77. 组合 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 思路: 回溯 优化: 剪枝 注意代码中i,就是for循环里选择的起始位置。 for (int i startIndex; i <…...
tauri2实现监听记住窗口大小变化,重启回复之前的窗口大小
要想实现记住窗口大小的功能,整体逻辑就是要监听窗口大小变化,将窗口大小保存下来,重启之后,读取保存的大小,然后恢复。这里可以使用rust层实现,也可以在前端实现。我这里就纯rust层实现了。 监听窗口变化…...