当前位置: 首页 > news >正文

python: SQLAlchemy (ORM) Simple example using mysql in Ubuntu 24.04

mysql sql script:

create table School  表
(`SchoolId` char(5) NOT NULL comment'主鍵primary key,學校編號',`SchoolName` nvarchar(500) NOT NULL DEFAULT '' comment' 學校名稱',`SchoolTelNo`  varchar(8)  NULL DEFAULT '' comment'電話號碼',PRIMARY KEY (SchoolId)   #主鍵
)COMMENT='學校表 School Table' DEFAULT CHARSET=utf8;create table Teacher
(`TeacherId` char(5) NOT NULL comment'主鍵primary key,老师編號',`TeacherFirstName` nvarchar(100) NOT NULL DEFAULT '' comment' 名',`TeacherLastName` nvarchar(20) NOT NULL DEFAULT '' comment' 姓',`TeacherGender` char(2) NOT NULL DEFAULT '' comment'性別',`TeacherTelNo`  varchar(8)  NULL DEFAULT '' comment'電話號碼',`TeacherSchoolId`  char(5) NOT NULL DEFAULT '' comment'外鍵 foreign key 學校ID',PRIMARY KEY (TeacherId),   #主鍵FOREIGN KEY(TeacherSchoolId) REFERENCES School(SchoolId)  #外鍵
)COMMENT='老師表Teacher Table' DEFAULT CHARSET=utf8;

项目结构

领域层(Domain Layer)

# encoding: utf-8
# 版权所有 2025 ©涂聚文有限公司 ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : Ubuntu 24.0
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  oracle 21c Neo4j
# Datetime  : 2025/2/20 20:23
# User      : geovindu
# Product   : PyCharm
# Project   : pyMySqlDDDOrmDemo
# File      : domain/entities/school.py
# explain   : 学习
'''
create table School  表
(`SchoolId` char(5) NOT NULL comment'主鍵primary key,學校編號',`SchoolName` nvarchar(500) NOT NULL DEFAULT '' comment' 學校名稱',`SchoolTelNo`  varchar(8)  NULL DEFAULT '' comment'電話號碼',PRIMARY KEY (SchoolId)   #主鍵
)COMMENT='學校表 School Table' DEFAULT CHARSET=utf8;'''class School:"""领域层(Domain Layer)定义业务实体"""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        : Ubuntu 24.0
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  oracle 21c Neo4j
# Datetime  : 2025/2/20 20:27
# User      : geovindu
# Product   : PyCharm
# Project   : pyMySqlDDDOrmDemo
# File      : domain/repositories/school.py
# explain   : 学习
from abc import ABC, abstractmethod
from typing import List
from ..entities.school import Schoolclass SchoolRepository(ABC):"""领域层(Domain Layer)存储库接口"""@abstractmethoddef add(self, school: School):pass@abstractmethoddef update(self, school: School):pass@abstractmethoddef delete(self, school_id: str):"""删除:param school_id::return:"""passdef get_schoolall(self) -> List[School]:"""所有: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:pass

基础设施层(Infrastructure Layer)

# encoding: utf-8
# 版权所有 2025 ©涂聚文有限公司 ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : Ubuntu 24.0
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  oracle 21c Neo4j
# Datetime  : 2025/2/20 20:46
# User      : geovindu
# Product   : PyCharm
# Project   : pyMySqlDDDOrmDemo
# File      : infrastructure/model/school.py
# explain   : 学习from sqlalchemy import create_engine, Column, String, ForeignKey
from sqlalchemy.orm import sessionmaker, declarative_base, relationshipBase = declarative_base()class SchoolModel(Base):"""基础设施层(Infrastructure Layer)数据库交互分开会报错"""__tablename__ = 'School'SchoolId = Column(String(5), primary_key=True)SchoolName = Column(String(500), nullable=False, default='')SchoolTelNo = Column(String(8), nullable=True, default='')teachers = relationship("TeacherModel", back_populates="school")class TeacherModel(Base):"""基础设施层(Infrastructure)数据库交互"""__tablename__ = 'Teacher'TeacherId = Column(String(5), primary_key=True)TeacherFirstName = Column(String(100), nullable=False, default='')TeacherLastName = Column(String(20), nullable=False, default='')TeacherGender = Column(String(2), nullable=False, default='')TeacherTelNo = Column(String(8), nullable=True, default='')TeacherSchoolId = Column(String(5), ForeignKey('School.SchoolId'), nullable=False, default='')school = relationship("SchoolModel", back_populates="teachers")# encoding: utf-8
# 版权所有 2025 ©涂聚文有限公司 ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : Ubuntu 24.0
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  oracle 21c Neo4j
# Datetime  : 2025/2/20 20:46
# User      : geovindu
# Product   : PyCharm
# Project   : pyMySqlDDDOrmDemo
# File      : infrastructure/repositories/school.py
# explain   : 学习
from sqlalchemy import create_engine, Column, String, ForeignKey
from sqlalchemy.orm import sessionmaker, declarative_base, relationship
from domain.entities.school import School
from ..model.school import SchoolModel
from ..database.mysqlHelper import MysqlHeler
from typing import List
class SchoolRepository:"""基础设施层(Infrastructure Layer)实现存储库接口"""def __init__(self):""""""self._Session = MysqlHeler()def add(self, school: School):""":param school::return:"""session = self._Session.getSession()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()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()school_model = session.query(SchoolModel).filter_by(SchoolId=school_id).first()if school_model:session.delete(school_model)session.commit()session.close()def get_schoolall(self) -> List[School]:"""查询所有所学校:return:"""session = self._Session.getSession()query = session.query(SchoolModel).all()'''li=[School(school.SchoolId, school.SchoolName, school.SchoolTelNo) for school in query]for i in li:print(i.school_id,i.school_name,i.school_tel_no)print("query", [School(school.SchoolId, school.SchoolName, school.SchoolTelNo) for school in query])'''session.close()return [School(school.SchoolId, school.SchoolName, school.SchoolTelNo) for school in query]def get_all(self, page: int, page_size: int, search_query: str = "") -> List[School]:""":param page::param page_size::param search_query::return:"""session = self._Session.getSession()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()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 Layer)

# encoding: utf-8
# 版权所有 2025 ©涂聚文有限公司 ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : Ubuntu 24.0
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  oracle 21c Neo4j
# Datetime  : 2025/2/20 20:04
# User      : geovindu
# Product   : PyCharm
# Project   : pyMySqlDDDOrmDemo
# File      : application/services/school.py
# explain   : 学习from typing import List
from domain.entities.school import School
from domain.repositories.school import SchoolRepositoryclass SchoolService:"""应用层(Application Layer)封装业务逻辑。"""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_schoolall(self) -> List[School]:"""所有:return:"""return self.repository.get_schoolall()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_school_count(self, search_query: str = "") -> int:""":param search_query::return:"""return self.repository.get_total_count(search_query)

表现层(Presentation Layer)

# encoding: utf-8
# 版权所有 2025 ©涂聚文有限公司 ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : Ubuntu 24.0
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  oracle 21c Neo4j
# Datetime  : 2025/2/20 20:47
# User      : geovindu
# Product   : PyCharm
# Project   : pyMySqlDDDOrmDemo
# File      : presentation/views/school.py
# explain   : 学习import tkinter as tk
from tkinter import ttkclass SchoolView(object):"""表现层(Presentation Layer)包含视图和控制器,处理用户界面和操作。"""def __init__(self, parent):""":param parent:"""self.frame = tk.Frame(parent)# 搜索框self.search_frame = ttk.Frame(self.frame)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(self.frame, 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(self.frame)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(self.frame)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):""":return:"""for item in self.tree.get_children():self.tree.delete(item)def populate_tree(self, schools):""":param schools::return:"""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, tatol,pagesize):""":param current_page::param total_pages::param tatol:param pagesize:return:"""self.page_label.config(text=f"Page {current_page} of {total_pages}  {pagesize}/total:{tatol}")def open_add_window(self, save_callback):""":param save_callback::return:"""top = tk.Toplevel(self.frame)top.title("Add School")top.iconbitmap("favicon.ico")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():""":return:"""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):""":param school_id::param school_name::param school_tel_no::param update_callback::return:"""top = tk.Toplevel(self.frame)top.title("Edit School")#top.iconbitmap("favicon.ico")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():""":return:"""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 ©涂聚文有限公司 ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : Ubuntu 24.0
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  oracle 21c Neo4j
# Datetime  : 2025/2/20 20:47
# User      : geovindu
# Product   : PyCharm
# Project   : pyMySqlDDDOrmDemo
# File      : presentation/controllers/school.py
# explain   : 学习import tkinter as tk
from application.services.school import SchoolService
from domain.entities.school import Schoolclass SchoolController(object):"""表现层(Presentation Layer)包含视图和控制器,处理用户界面和操作。"""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_school_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,total_count,self.page_size)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 ©涂聚文有限公司 ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:先安装: pip install --upgrade pip
#  pip install pymysql
#  pip install sqlalchemy
#  sudo apt install python3-tk
#  pip install pillow
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : Ubuntu 24.0
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  oracle 21c Neo4j
# Datetime  : 2025/2/20 20:21
# User      : geovindu
# Product   : PyCharm
# Project   : pyMySqlDDDOrmDemo
# File      : main.py
# explain   : 学习
'''
DDD
定义业务实体和存储库接口
domain--entities--repositories基础设施层(Infrastructure)
实现存储库接口,与数据库交互。
infrastructure--database--model--repositories
应用层(Application)
封装业务逻辑。
application--services表现层(Presentation)
包含视图和控制器,处理用户界面和操作。
presentation--views--controllers'''import tkinter as tk
from infrastructure.repositories import SchoolRepository,TeacherRepository    # init 必须配置,才可以这样引用
from application.services import SchoolService, TeacherService
from presentation.views import SchoolView, TeacherView
from presentation.controllers import SchoolController, TeacherControllerif __name__ == '__main__':"""    主程序输出"""root = tk.Tk()root.title("学校老师管理系统")# 创建数据库存储库实例school_repository = SchoolRepository()teacher_repository = TeacherRepository()# 创建服务实例school_service = SchoolService(school_repository)teacher_service = TeacherService(teacher_repository)# 创建视图实例school_view = SchoolView(root)teacher_view = TeacherView(root)school_view.frame.pack_forget()teacher_view.frame.pack_forget()# 创建控制器实例school_controller = SchoolController(school_service, school_view)# 需要加上学校的务服实例。便于选择学校teacher_controller = TeacherController(teacher_service, school_service, teacher_view)# 创建主菜单menubar = tk.Menu(root)root.config(menu=menubar)# 创建主菜单下的子菜单main_menu = tk.Menu(menubar, tearoff=0)menubar.add_cascade(label="管理菜单", menu=main_menu)# 学校管理子菜单school_menu = tk.Menu(main_menu, tearoff=0)main_menu.add_cascade(label="学校管理", menu=school_menu)school_menu.add_command(label="查看学校信息", command=lambda: (school_view.frame.pack(),teacher_view.frame.pack_forget()  # 隐藏))# 老师管理子菜单teacher_menu = tk.Menu(main_menu, tearoff=0)main_menu.add_cascade(label="老师管理", menu=teacher_menu)teacher_menu.add_command(label="查看老师信息", command=lambda: (teacher_view.frame.pack(),school_view.frame.pack_forget()   # 隐藏))#root.iconbitmap(delattr="favicon.ico")#root.tk.call('wm', 'iconphoto', root._w, tk.PhotoImage(file='favicon.ico'))root.mainloop()print('PyCharm,geovindu,Geovin Du,涂聚文!')

输出:

相关文章:

python: SQLAlchemy (ORM) Simple example using mysql in Ubuntu 24.04

mysql sql script: create table School 表 (SchoolId char(5) NOT NULL comment主鍵primary key&#xff0c;學校編號,SchoolName nvarchar(500) NOT NULL DEFAULT comment 學校名稱,SchoolTelNo varchar(8) NULL DEFAULT comment電話號碼,PRIMARY KEY (SchoolId) #主…...

【前端】【nuxt】nuxt优势(MVP开发),转换SSR与SPA模式

Nuxt.js 核心优势 自动化路由系统 无需手动配置路由&#xff1a;在 pages/ 目录下创建 .vue 文件即可自动生成路由&#xff0c;支持动态路由&#xff08;如 pages/user/[id].vue → /user/:id&#xff09;。嵌套路由&#xff1a;通过 parent.vue parent/child.vue 目录结构自动…...

洛谷B3619(B3620)

B3619 10 进制转 x 进制 - 洛谷 B3620 x 进制转 10 进制 - 洛谷 代码区&#xff1a; #include<algorithm> #include<iostream> #include<vector> using namespace std;int main(){int n,x;cin >> n >> x;vector<char> arry;while(n){if(…...

基于springboot+vue的酒店管理系统的设计与实现

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…...

android调用ffmpeg解析rtsp协议的视频流

文章目录 一、背景二、解析rtsp数据1、C层功能代码2、jni层的定义3、app层的调用 三、源码下载 一、背景 本demo主要介绍android调用ffmpeg中的接口解析rtsp协议的视频流&#xff08;不解析音频&#xff09;&#xff0c;得到yuv数据&#xff0c;把yuv转bitmap在android设备上显…...

cursor使用记录

一、如何查看自己登录的是哪个账号 操作路径&#xff1a;Cursor -- 首选项 -- Cursor Setting &#xff08;有快捷键&#xff09; 二、状态修改为竖排&#xff08;默认是横排&#xff09; 默认如图展示&#xff0c;想要像vscode、idea等等在左侧竖着展示 操作路径&#xff1…...

Java 使用websocket

添加依赖 <!-- WebSocket 支持 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>添加配置类 Configuration public class WebSocketConfig {B…...

蓝桥杯 Java B 组之背包问题、最长递增子序列(LIS)

Day 4&#xff1a;背包问题、最长递增子序列&#xff08;LIS&#xff09; &#x1f4d6; 一、动态规划&#xff08;Dynamic Programming&#xff09;简介 动态规划是一种通过将复杂问题分解成更小的子问题来解决问题的算法设计思想。它主要用于解决具有最优子结构和重叠子问题…...

在PyTorch中使用插值法来优化卷积神经网络(CNN)所需硬件资源

插值法其实就是在已知数据点之间估计未知点的值。通过已知的离散数据点,构造一个连续的曲线函数,预测数据点之间的空缺值是什么并且自动填补上去。 适用场景: 在卷积神经网络(CNN)中的应用场景中,经常遇到计算资源有限,比如显存不够或者处理速度慢,需要用插值来降低计…...

seacmsv9 SQL注入漏洞(报错注入)

一、海洋CMS简介 海洋cms是为解决站长核心需求而设计的视频内容管理系统&#xff0c;一套程序自适应电脑、手机、平板、APP多个终端入口&#xff0c;无任何加密代码、安全有保障&#xff0c;是您最佳的建站工具。——来自seacms官网&#xff08;简而言之就是专门搭建看片网站的…...

Java 中的内存泄漏问题及解决方案

在 Java 中&#xff0c;内存泄漏&#xff08;Memory Leak&#xff09;是指在程序运行过程中&#xff0c;某些对象已经不再使用&#xff0c;但由于引用仍然存在&#xff0c;这些对象无法被垃圾回收器回收&#xff0c;从而导致内存无法释放&#xff0c;最终可能导致系统性能下降甚…...

解决 ERROR: Failed building wheel for vllm Failed to build vllm

1. 完整报错 copying build\lib\vllm\model_executor\layers\fused_moe\configs\E256,N128,device_nameNVIDIA_H100_80GB_HBM3,dtypefp8_w8a8,block_shape[128,128].json -> build\bdist.win-amd64\wheel.\vllm\model_executor\layers\fused_moe\configs error: could not …...

从CNN到Transformer:遥感影像目标检测的未来趋势

文章目录 前言专题一、深度卷积网络知识专题二、PyTorch应用与实践&#xff08;遥感图像场景分类&#xff09;专题三、卷积神经网络实践与遥感影像目标检测专题四、卷积神经网络的遥感影像目标检测任务案例【FasterRCNN】专题五、Transformer与遥感影像目标检测专题六、Transfo…...

ecovadis社会企业责任认证

EcoVadis 是一家全球性的企业社会责任 (CSR) 评级机构&#xff0c;旨在通过评估企业在环境、劳工与人权、商业道德和可持续采购等方面的表现&#xff0c;帮助提升其可持续性和社会责任实践。 EcoVadis 认证的核心内容 环境 评估企业在能源消耗、碳排放、废物管理等方面的表现。…...

使用 Docker 部署 Flask 应用

使用 Docker 部署 Flask 应用 一、引言 在现代软件开发中,应用的部署和环境管理是至关重要的环节。传统的部署方式常常会遇到 “在我机器上能运行,在你机器上不行” 的问题,而 Docker 的出现很好地解决了这个痛点。Docker 是一个用于开发、部署和运行应用程序的开放平台,…...

istio介绍补充以及使用篇

istio介绍补充以及使用篇 前言 介绍istio各个组件创建istio的方式手动注入自动注入side car 使用istio做流量灰度如有需要收藏的看官&#xff0c;顺便也用发财的小手点点赞哈&#xff0c;如有错漏&#xff0c;也欢迎各位在评论区评论&#xff01; 前言 前篇istio介绍了引入ist…...

DeepSeek 助力 Vue 开发:打造丝滑的 键盘快捷键(Keyboard Shortcuts)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…...

【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter19-表单脚本

十九、表单脚本 表单脚本 JavaScript 较早的一个用途是承担一部分服务器端表单处理的责任。虽然 Web 和 JavaScript 都已经发展了很多年&#xff0c;但 Web 表单的变化不是很大。由于不能直接使用表单解决问题&#xff0c;因此开发者不得不使用JavaScript 既做表单验证&#xf…...

如何使用深度学习进行手写数字识别(MNIST)

目录 手写数字识别(MNIST)1. 导入必要的库2. 加载和预处理数据3. 构建模型4. 编译模型5. 训练模型6. 评估模型7. 可视化训练过程(可选)代码说明运行环境总结当然可以!下面是一个使用Python和Keras(TensorFlow后端)实现的简单深度学习案例——手写数字识别(MNIST数据集)…...

【UCB CS 61B SP24】Lecture 5 - Lists 3: DLLists and Arrays学习笔记

本文内容为构建双向循环链表、使用 Java 的泛型将其优化为通用类型的链表以及数组的基本语法介绍。 1. 双向链表 回顾上一节课写的代码&#xff0c;当执行 addLast() 与 getLast() 方法时需要遍历链表&#xff0c;效率不高&#xff0c;因此可以添加一个指向链表末尾的索引&am…...

Unity Excel导表工具转Lua文件

思路介绍 借助EPPlus读取Excel文件中的配置数据&#xff0c;根据指定的不同类型的数据配置规则来解析成对应的代码文本&#xff0c;将解析出的字符串内容写入到XXX.lua.txt文件中即可 EPPlus常用API //命名空间 using OfficeOpenXml;//Excel文件路径 var fileExcel new File…...

kafka消费能力压测:使用官方工具

背景 在之前的业务场景中&#xff0c;我们发现Kafka的实际消费能力远低于预期。尽管我们使用了kafka-go组件并进行了相关测试&#xff0c;测试情况见《kafka-go:性能测试》这篇文章。但并未能准确找出消费能力低下的原因。 我们曾怀疑这可能是由我的电脑网络带宽问题或Kafka部…...

算法题(74):Pow(x,n)

审题&#xff1a; 需要我们计算出x&#xff08;double类型&#xff09;的n次幂&#xff0c;并返回 思路&#xff1a; 方法一&#xff1a;递归 &#xff08;1&#xff09;首先我们的n分为正和负&#xff0c;对于负的我们需要将n转为正的进行运算后&#xff0c;用1.0除以运算结果…...

windwos与linux环境下Iperf3带宽测试工具的安装、使用

目录 一、前言 二、windows 2.1下载 2.2安装 2.3使用 2.3.1服务端 2.3.2客户端 2.3.3输出内容 1.客户端 2.服务端 2.4.相关命令 三、linux 3.1安装 3.2使用 1.服务端 2.客户端 3.输出内容 1.客户端 2.服务端 一、前言 在数字化浪潮下&#xff0c;网络性能…...

GCC编译器(含预处理/编译/汇编/链接四阶段详解)

GCC编译器&#xff08;含预处理/编译/汇编/链接四阶段详解&#xff09; 1. 预处理阶段&#xff08;生成 .i 文件&#xff09;2. 编译阶段&#xff08;生成 .s 文件&#xff09;3. 汇编阶段&#xff08;生成 .o 文件&#xff09;4. 链接阶段&#xff08;生成可执行文件&#xff…...

20250221 NLP

1.向量和嵌入 https://zhuanlan.zhihu.com/p/634237861 encoder的输入就是向量&#xff0c;提前嵌入为向量 二.多模态文本嵌入向量过程 1.文本预处理 文本tokenizer之前需要预处理吗&#xff1f; 是的&#xff0c;文本tokenizer之前通常需要对文本进行预处理。预处理步骤可…...

Mac M3/M4 本地部署Deepseek并集成vscode

Mac 部署 使用傻瓜集成平台ollama&#xff0c;ollama平台依赖于docker&#xff0c;Mac的M3/M4 因doesn’t have VT-X/AMD-v enabled 所以VB,VM无法使用&#xff0c;导致docker无法启动&#xff0c;需要使用docker的替代品podman&#xff0c; 它完全兼容docker brew install p…...

flink使用demo

1、添加不同数据源 package com.baidu.keyue.deepsight.memory.test;import com.baidu.keyue.deepsight.memory.WordCount; import com.baidu.keyue.deepsight.memory.WordCountData; import org.apache.flink.api.common.RuntimeExecutionMode; import org.apache.flink.api.…...

目标检测中单阶段检测模型与双阶段检测模型详细对比与说明

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

简识Spring创建Bean方式和设计模式

一、理论解释&#xff1a; Spring在创建Bean时主要有四种方式&#xff0c;这些方式分别涉及到了不同的设计模式。以下是具体的创建方式及对应的设计模式&#xff1a; 通过反射调用构造方法创建Bean&#xff1a; 方式&#xff1a;在Spring的配置文件中&#xff0c;使用<bean…...

空字符串““、空白字符串“ “和 null 三者的区别

空字符串、空白字符串和 null 三者的区别表格&#xff1a; 类型定义示例长度是否有值空字符串字符串长度为 0&#xff0c;但不是 null&#xff0c;即存在一个有效的空字符串对象。""0有值&#xff08;空值&#xff09;空白字符串字符串包含空格、制表符等空白字符&a…...

agent和android怎么结合:健康助手,旅游助手,学习助手

agent和android怎么结合:健康助手,旅游助手,学习助手 创新点 智能交互创新:提出全新的agent - Android交互模式,如基于手势、语音、眼动等多模态融合的交互方式。例如让agent能够同时理解用户的语音指令和手势动作,在Android设备上提供更加自然和高效的交互体验,比如在…...

1.16作业

1 进注册界面&#xff0c;第一次以为抓包选把isadmin ture了就好 第二次尝试&#xff0c;勾选is admin&#xff0c;有需要invitecode&#xff08;经典&#xff09; 2 p r**5 r**4 - r**3 r**2 - r 2023 q r**5 - r**4 r**3 - r**2 r 2023 n 25066797992811602609904…...

上帝之眼——nmap

nmap介绍 Nmap&#xff08;网络映射器&#xff09;是一款广受欢迎的网络探测和安全评估工具&#xff0c;被誉为“上帝之眼”。它以其强大的扫描功能和广泛的应用场景&#xff0c;成为系统管理员和安全专家手中的得力助手。本文将对Nmap进行详细介绍&#xff0c;包括其优点、基本…...

6.日常英语笔记

It’s a pity that my English hasn’t improved much, and I’m not able to chat with you freely. lung 肺 pulmonary 医学中的肺部相关的 pulmonary disease 肺部疾病 pneumonia 肺炎 pulmonary inflammation 肺炎 stick on the wall 贴到墙上 paste on the wall faint w…...

工业路由器和工业交换机,打造高效稳定的工业网络?

工业路由器和工业交换机各有千秋&#xff0c;但如何将它们完美结合&#xff0c;构建稳定高效的工业网络&#xff1f;答案就在这里&#xff01; 工业物联网&#xff08;IIoT&#xff09;是高效、稳定的工业网络成为智慧工厂、工业自动化和远程监控等场景的基础支撑。工业路由器…...

[c++]--类和对象

目录 前言 一、类的定义 1.类定义格式 2.访问限定符 3.类域 二、实例化 1.实例化概念 2.对象大小 三、this指针 四、C和C语言实现Stack对比 五、类的默认成员函数 1.构造函数 2.析构函数 3.拷贝构造函数 4.赋值运算符重载 4.1.运算符重载 4.2.赋值运算符重载 5.取地址运算符重载…...

图论 之 迪斯科特拉算法求解最短路径

文章目录 题目743.网络延迟时间3341.到达最后一个房间的最少时间I 求解最短路径的问题&#xff0c;分为使用BFS和使用迪斯科特拉算法&#xff0c;这两种算法求解的范围是有区别的 BFS适合求解&#xff0c;边的权值都是1的图中的最短路径的问题 图论 之 BFS迪斯科特拉算法适合求…...

Linux中[root@localhost ~]#

root &#xff1a;当前登录用户 &#xff1a;分隔符 localhost &#xff1a;主机名。当前电脑的名字 ~&#xff1a;当前用户所在的位置 #&#xff1a;命令提示符&#xff0c;从这个位置开始可以输入命令 另一个提示符是$ 如果是 root &#xff0c;则提示&#xff03; 如果是普…...

DuodooBMS源码解读之 sale_delivery模块

发货通知单下载功能操作手册 一、功能概述 该代码实现了发货通知单的下载功能&#xff0c;用户可以选择要下载的发货通知单&#xff0c;系统将生成包含发货通知单详细信息的 Excel 文件供用户下载。 二、文件结构及说明 sale_delivery/controllers/download.py 定义了一个 …...

uniapp引入uview组件库(可以引用多个组件)

第一步安装 npm install uview-ui2.0.31 第二步更新uview npm update uview-ui 第三步在main.js中引入uview组件库 第四步在uni.scss中引入import "uview-ui/theme.scss"样式 第五步在文件中使用组件...

SpringCloud-Eureka初步使用

什么是REST是一组用于规范资源在网络中转移的表现形式软件架构设计风格.简单来说就是客户端和服务器之间的一种交互形式 什么是RESTful,满足了REST风格的接口或者程序,RESTful API是其中的接口,spring中提供了RestTemplate这个类,他强制执行了REST的规范,包括使用HTTP协议的状…...

【gitlab】认识 持续集成与部署

持续集成&#xff08;CI&#xff09;与持续部署&#xff08;CD&#xff09; 1. 什么是持续集成&#xff08;CI&#xff09;&#xff1f; 持续集成&#xff08;Continuous Integration&#xff0c;CI&#xff09;是一种软件开发实践&#xff0c;强调开发人员频繁地将代码提交到…...

机器学习,我们主要学习什么?

机器学习的发展历程 机器学习的发展历程&#xff0c;大致分为以下几个阶段&#xff1a; 1. 起源与早期探索&#xff08;20世纪40年代-60年代&#xff09; 1949年&#xff1a;Hebb提出了基于神经心理学的学习机制&#xff0c;开启了机器学习的先河1950年代&#xff1a;机器学习的…...

React 高阶组件的优缺点

React 高阶组件的优缺点 优点 1. 代码复用性高 公共逻辑封装&#xff1a;当多个组件需要实现相同的功能或逻辑时&#xff0c;高阶组件可以将这些逻辑封装起来&#xff0c;避免代码重复。例如&#xff0c;多个组件都需要在挂载时进行数据获取操作&#xff0c;就可以创建一个数…...

算法1-4 数楼梯

题目描述 楼梯有 N 阶&#xff0c;上楼可以一步上一阶&#xff0c;也可以一步上二阶。 编一个程序&#xff0c;计算共有多少种不同的走法。 输入格式 一个数字&#xff0c;楼梯数。 输出格式 输出走的方式总数。 输入输出样例 输入 #1 4 输出 #1 5 说明/提示 对于…...

我的世界1.20.1forge开发教程(6)——自定义燃料,熔炼规则、配方

配方篇 在Minecraft中,配方代码是用于定义合成配方的一种数据格式。在开发者的角度,配方代码通常以JSON格式编写,包含了合成所需的原料、合成产物以及合成方式等信息。 在1.12版本之前,开发者需要通过修改游戏的源代码来添加自定义配方。这通常需要对游戏的Java代码进行修…...

推荐几款SpringBoot项目手脚架

作为程序员、一般需要搭建项目手脚架时、都会去Gitee或Github上去找、但是由于Github在国内并不稳定、所以就只能去Gitee去上查找。 不同语言检索方式不一样、但是也类似。 Gitee WEB应用开发 / 后台管理框架 芋道源码 ELADMIN 后台管理系统 一个基于 Spring Boot 2.7.1…...

01 1个路由器+两个子网

前言 这是最近一个朋友的 ensp 相关的问题, 这里来大致了解一下 ensp, 计算机网络拓扑 相关基础知识 这里一系列文章, 主要是参照了这位博主的 ensp 专栏 这里 我只是做了一个记录, 自己实际操作了一遍, 增强了一些 自己的理解 当然 这里仅仅是一个 简单的示例, 实际场景…...

buu-[OGeek2019]babyrop-好久不见41

打开 /dev/urandom 设备文件&#xff0c;读取4个字节到 buf 中。 将 buf 传递给 sub_804871F() 函数&#xff0c;该函数似乎对输入进行某种处理并返回一个值 v2。 最后&#xff0c;将 v2 传递给 sub_80487D0() 函数。 这个函数首先将 a1 转换为字符串 s。 然后从标准输入读…...