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

python: generator IDAL and DAL using sql server 2019

其它数据库也是一样的思维方式

create IDAL

# encoding: utf-8
# 版权所有 2024 ©涂聚文有限公司
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : windows 10
# Datetime  : 2024/11/18 21:10
# User      : geovindu
# Product   : PyCharm
# Project   : pyGenerator
# File      : SqlServerGenerator/createInterface.py
# explain   : 学习
import os
import re
import sys
import io
import datetime
from common.fileHelper import FileHelper
from common.strHelper import StrHelper
from bll.tableNameAndKey import TableNameAndKeyBll
from bll.tableForegin import TableForeginBll
from bll.tableModel import TableModelBllclass CreateInterface(object):""""""def __init__(self):self.__modelpath = os.path.join(os.getcwd() + "/test/interface/")self.__file = FileHelper()self.__blltablekey = TableNameAndKeyBll()self.__database = "sql server 2019"self.__name = "CreateInterface"passdef __del__(self):""":return:"""print(f"{self.__name} ERASE MEMORY")def addpackagefile(self):"""生成包配置文件:return:"""now = datetime.datetime.now()bll = TableNameAndKeyBll()sb = []sbt = f"""
# encoding: utf-8
# 版权所有 2024 ©涂聚文有限公司
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : windows 10
# Datetime  : {now.strftime('%Y-%m-%d %H:%M:%S')}
# database  :{self.__database}
# User      : geovindu
# Product   : PyCharm
# Project   : IctGame
# File      : interface/__init__.py
# explain   : 学习"""sb.append(sbt)for li in bll.selectSql():sbp=f"""
from interface.{StrHelper.firstLower(li.TableName)} import I{li.TableName}
"""sb.append(sbp)if not os.path.exists(self.__modelpath):os.makedirs(self.__modelpath)filepath = self.__modelpath + '__init__.py'content = ''.join(sb)ok = self.__file.createModelFile(filepath, content)def add(self):"""生成实体:return:"""# fileHelper=FileHelper()now = datetime.datetime.now()bll = TableNameAndKeyBll()for li in bll.selectSql():sb = []sbt = f"""
# encoding: utf-8
# 版权所有 2024 ©涂聚文有限公司
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : windows 10
# Datetime  : {now.strftime('%Y-%m-%d %H:%M:%S')}
# database  :{self.__database}
# User      : geovindu
# Product   : PyCharm
# Project   : IctGame
# File      : interface/{li.TableName}.py
# explain   : 学习
from __future__ import annotations
from abc import ABC, abstractmethod
import os
import sys
from model.{StrHelper.firstLower(li.TableName)} import {li.TableName}Infoclass I{li.TableName}(ABC):\"""{li.TableDescription}                   \"""
"""sb.append(sbt)tbll = TableModelBll()sinhead = f"""@classmethoddef __subclasshook__(cls, subclass):return (hasattr(subclass, 'load_data_source') andcallable(subclass.load_data_source) andhasattr(subclass, 'extract_text') andcallable(subclass.extract_text) orNotImplemented) @abstractmethoddef selectSql(cls) -> list:\""":return:\"""pass@abstractmethoddef selectSqlCount(cls) -> list:\"""查询数据 总数:return:\"""pass@abstractmethoddef selectSqlOrder(cls, order: str) -> list:\""":param order::return:\"""pass@abstractmethoddef selectSort(cls,field:str,isOrder:bool)->list:\""":param field:param order:  desc/asc:return:\"""pass@abstractmethoddef selectIdSql(cls, {StrHelper.firstLower(li.FieldName)}: str):\""":param {li.FieldName}::return:\"""pass@abstractmethoddef selectProc(cls):\""":return:\"""pass@abstractmethoddef selectIdProc(cls, {StrHelper.firstLower(li.FieldName)}):\""":param {li.FieldName}::return:\"""pass@abstractmethoddef addSql(cls, info: {li.TableName}Info):\""":param info::return:\"""pass@abstractmethoddef addProc(cls, info: {li.TableName}Info):\""":param info::return:\"""pass@abstractmethoddef addOutProc(cls, info: {li.TableName}Info):\""":param info::return:\"""pass@abstractmethoddef editSql(cls, info: {li.TableName}Info):\""":param info::return:\"""pass@abstractmethoddef editProc(cls, info: {li.TableName}Info):\""":param info::return:\"""pass@abstractmethoddef delSql(cls, {StrHelper.firstLower(li.FieldName)}):\""":param {li.FieldName}::return:\"""pass@abstractmethoddef delProc(cls, {StrHelper.firstLower(li.FieldName)}):\""":param {li.FieldName}::return:\"""pass              """sb.append(sinhead)if not os.path.exists(self.__modelpath):os.makedirs(self.__modelpath)filepath = self.__modelpath + StrHelper.firstLower(li.TableName) + '.py'content = ''.join(sb)ok = self.__file.createModelFile(filepath, content)

create DAL 

# encoding: utf-8
# 版权所有 2024 ©涂聚文有限公司
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : windows 10
# Datetime  : 2024/11/18 21:10
# User      : geovindu
# Product   : PyCharm
# Project   : pyGenerator
# File      : SqlServerGenerator/createDal.py
# explain   : 学习
import os
import re
import sys
import io
import datetime
from common.fileHelper import FileHelper
from common.strHelper import StrHelper
from bll.tableNameAndKey import TableNameAndKeyBll
from bll.tableForegin import TableForeginBll
from bll.tableModel import TableModelBllclass CreateDal(object):""""""def __init__(self):self.__modelpath = os.path.join(os.getcwd() + "/test/dal/")self.__file = FileHelper()self.__blltablekey = TableNameAndKeyBll()self.__bllTableModel = TableModelBll()self.__database = "sql server 2019"self.__name = "CreateDal"passdef __del__(self):""":return:"""print(f"{self.__name} ERASE MEMORY")def getColumn(self,tableName:str) -> str:"""column=("SchoolId","SchoolName","SchoolTelNo"):return:"""tables = self.__bllTableModel.selectSql(tableName)columns = []columnstr = '('if len(tables) > 0:for obj in tables:columns.append("\""+obj.FieldName+"\"")columnstr =columnstr + ','.join(columns)return columnstr+')'def getVales(self,tableName:str) -> str:"""egs:vales=[info.SchoolId,info.SchoolName,info.SchoolTelNo]:return:"""vales = []valesstr = '['tables = self.__bllTableModel.selectSql(tableName)if len(tables)>0:for obj in tables:vales.append('info.'+obj.FieldName)valesstr = valesstr+','.join(vales)return valesstr + ']'def getArgs(self,tableName:str) -> str:"""egs:args = [info.SchoolId,info.SchoolName,info.SchoolTelNo] #修改的args ={{"schoolId":f"{{info.schoolId}}","SchoolName":f"{{info.SchoolName}}","SchoolTelNo":f"{{info.SchoolTelNo}}"}}:return:"""args = []argsstr = '['tables = self.__bllTableModel.selectSql(tableName)if len(tables)>0:for obj in tables:args.append('info.'+obj.FieldName)argsstr =argsstr+ ','.join(args)return argsstr+']'def getArgs(self,tableName:str) -> str:"""egs:args = [info.SchoolId,info.SchoolName,info.SchoolTelNo] #修改的:return:"""args = []argsstr = '['tables = self.__bllTableModel.selectSql(tableName)if len(tables)>0:for obj in tables:args.append('info.'+obj.FieldName)argsstr = argsstr+','.join(args)return argsstr+']'def getArgsVariable(self,tableName:str) -> str:"""egs:args ={"schoolId":f"{{info.schoolId}}","SchoolName":f"{{info.SchoolName}}","SchoolTelNo":f"{{info.SchoolTelNo}}"}}:return:"""args = []argsstr = '{'tables = self.__bllTableModel.selectSql(tableName)if len(tables)>0:for obj in tables:args.append("\""+obj.FieldName+"\":f\"{info."+obj.FieldName+"}\"")argsstr =argsstr+ ','.join(args)return argsstr+'}'def getArgsOut(self,tableName:str, primekey:str) -> str:"""egs:args = [info.SchoolName, info.SchoolTelNo,outid]   #添加返回值:return:"""args = []argsstr = '['tables = self.__bllTableModel.selectSql(tableName)if len(tables)>0:for obj in tables:if str(obj.FieldName).lower() != primekey.lower():args.append('info.'+obj.FieldName)argsstr = argsstr+','.join(args)return argsstr+',out'+primekey+']'def addpackagefile(self):"""生成包配置文件:return:"""now = datetime.datetime.now()bll = TableNameAndKeyBll()sb = []sbt = f"""
# encoding: utf-8
# 版权所有 2024 ©涂聚文有限公司
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : windows 10
# Datetime  : {now.strftime('%Y-%m-%d %H:%M:%S')}
# database  :{self.__database}
# User      : geovindu
# Product   : PyCharm
# Project   : IctGame
# File      : dal/__init__.py
# explain   : 学习"""sb.append(sbt)for li in bll.selectSql():sbp=f"""
from dal.{StrHelper.firstLower(li.TableName)} import {li.TableName}Dal
"""sb.append(sbp)if not os.path.exists(self.__modelpath):os.makedirs(self.__modelpath)filepath = self.__modelpath + '__init__.py'content = ''.join(sb)ok = self.__file.createModelFile(filepath, content)def add(self):"""生成实体:return:"""# fileHelper=FileHelper()now = datetime.datetime.now()bll = TableNameAndKeyBll()for li in bll.selectSql():sb = []sbt = f"""
# encoding: utf-8
# 版权所有 2024 ©涂聚文有限公司
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : windows 10
# Datetime  : {now.strftime('%Y-%m-%d %H:%M:%S')}
# database  :{self.__database}
# User      : geovindu
# Product   : PyCharm
# Project   : IctGame
# File      : dal/{li.TableName}.py
# explain   : 学习
from __future__ import annotations
from abc import ABC, abstractmethod
import os
import sys
from model.{StrHelper.firstLower(li.TableName)} import {li.TableName}Info
from DBUtility.MsSQLHelper import MsSqlHelper
from interface.{StrHelper.firstLower(li.TableName)} import I{li.TableName}class {li.TableName}Dal(I{li.TableName}):\"""{li.TableDescription}                   \"""
"""sb.append(sbt)sinhead = f"""myms = MsSqlHelper()def __init__(self):\"""构造函数,方法:param strserver::param struser::param strpwd::param strdatabase:\"""self._strserver = ""self._struser = ""self._strpwd = ""self._strdatabase =""def selectSql(cls)->list:\"""查询数据 self._strserver, self._struser, self._strpwd, self._strdatabase:return:\"""row=cls.myms.execute("select * from {li.TableName};")#cls.myms.close()return rowdef selectSqlCount(cls)->list:\"""查询数据 总数:return:\"""row=cls.myms.execute("select count(*) as total from {li.TableName};")#cls.myms.close()return row[0]def selectSqlOrder(cls,order:str)->list:\""":param order:  SchoolId desc/asc:return:\"""students=[]strsql=f"select * from {li.TableName} order by {{order}};"row=cls.myms.execute(f"select * from {li.TableName} order by {{order}};")return rowdef selectSort(cls,field:str,isOrder:bool)->list:\""":param field {li.FieldName}:param order:  desc/asc:return:\"""order='desc'if isOrder==True:order='desc'else:order='asc'strsql=f"select * from {li.TableName} order by {{field}} {{order}};"row=cls.myms.execute(f"select * from {li.TableName} order by {{field}} {{order}};")#cls.myms.close()return rowdef selectIdSql(cls,{li.FieldName}:str)->list:\""":param {li.FieldName}: 主键ID:return:\"""row=cls.myms.execute(f"select * from {li.TableName} where SchoolId='{{SchoolId}}';")  #考虑数据类型#cls.myms.close()return rowdef selectProc(cls)->list:\"""存储过程:return:\"""args = ()row = cls.myms.executeCallProc("procSelect{li.TableName}All",args)return rowdef selectIdProc(cls,{li.FieldName}:str)->list:\"""存储过程:param {li.FieldName}: 主键ID:return:\"""args = ({li.FieldName},)row = cls.myms.executeCallProc('procSelect{li.TableName}', args)return rowdef addSql(cls,info:{li.TableName}Info)->int:\"""添加,要考虑添加返回ID值:param info:实体类:return:\"""column={self.getColumn(li.TableName)}vales={self.getVales(li.TableName)}return cls.myms.insertByColumnaAndValues("{li.TableName}",column,vales)def addProc(cls,info:{li.TableName}Info)->int:\"""添加,要考虑添加返回ID值:param info:实体类:return:\"""args={self.getArgs(li.TableName)}return cls.myms.insertCallProc("procInsert{li.TableName}",args)def addOutProc(cls,info:{li.TableName}Info) -> int:\"""添加,要考虑添加返回ID值:param info:实体类:return: 返回增加的ID\"""id = 0try:outid =('int',) #输出,元组类型print(info)args = {self.getArgsOut(li.TableName,li.FieldName)}print(args)result=cls.myms.insertOutCallProc("procInsert{li.TableName}Output", args)print(result)id = resultexcept Exception as ex:print(ex)return iddef editSql(cls,info:{li.TableName}Info)->int:\""":param info:实体类:return:\"""args = {self.getArgsVariable(li.TableName)}where = f"{li.FieldName}={{info.{li.FieldName}}}" ##print(args,where)return cls.myms.updateByKeyValues("{li.TableName}",where,args)def editProc(cls, info: {li.TableName}Info)->int:\""":param info: 实体类:return:\"""args = {self.getArgs(li.TableName)}return cls.myms.updateProc("procUpdate{li.TableName}",args)def delSql(cls,{li.FieldName}:str)->int:\"""sql语句删除:param {li.FieldName}: 主键ID:return:\"""where={{f"{li.FieldName}":{li.FieldName}}}return cls.myms.deleteByKeyValues("{li.TableName}",where)def delProc(cls, {li.FieldName}:str)->int:\"""删除 存储过程 删除多个ID,后面增加:param {li.FieldName}: 主键ID:return:\"""args ={li.FieldName}k=cls.myms.deleteProc("procDuDelete{li.TableName}", args)return k           
"""sb.append(sinhead)if not os.path.exists(self.__modelpath):os.makedirs(self.__modelpath)filepath = self.__modelpath + StrHelper.firstLower(li.TableName) + '.py'content = ''.join(sb)ok = self.__file.createModelFile(filepath, content)

生成的代码:

# encoding: utf-8
# 版权所有 2024 ©涂聚文有限公司
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : windows 10
# Datetime  : 2024-11-19 21:12:32
# database  :sql server 2019
# User      : geovindu
# Product   : PyCharm
# Project   : IctGame
# File      : interface/School.py
# explain   : 学习
from __future__ import annotations
from abc import ABC, abstractmethod
import os
import sys
from model.school import SchoolInfoclass ISchool(ABC):"""学校表                   """@classmethoddef __subclasshook__(cls, subclass):return (hasattr(subclass, 'load_data_source') andcallable(subclass.load_data_source) andhasattr(subclass, 'extract_text') andcallable(subclass.extract_text) orNotImplemented) @abstractmethoddef selectSql(cls) -> list:""":return:"""pass@abstractmethoddef selectSqlCount(cls) -> list:"""查询数据 总数:return:"""pass@abstractmethoddef selectSqlOrder(cls, order: str) -> list:""":param order::return:"""pass@abstractmethoddef selectSort(cls,field:str,isOrder:bool)->list:""":param field:param order:  desc/asc:return:"""pass@abstractmethoddef selectIdSql(cls, schoolId: str):""":param SchoolId::return:"""pass@abstractmethoddef selectProc(cls):""":return:"""pass@abstractmethoddef selectIdProc(cls, schoolId):""":param SchoolId::return:"""pass@abstractmethoddef addSql(cls, info: SchoolInfo):""":param info::return:"""pass@abstractmethoddef addProc(cls, info: SchoolInfo):""":param info::return:"""pass@abstractmethoddef addOutProc(cls, info: SchoolInfo):""":param info::return:"""pass@abstractmethoddef editSql(cls, info: SchoolInfo):""":param info::return:"""pass@abstractmethoddef editProc(cls, info: SchoolInfo):""":param info::return:"""pass@abstractmethoddef delSql(cls, schoolId):""":param SchoolId::return:"""pass@abstractmethoddef delProc(cls, schoolId):""":param SchoolId::return:"""pass              

# encoding: utf-8
# 版权所有 2024 ©涂聚文有限公司
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : windows 10
# Datetime  : 2024-11-19 21:12:32
# database  :sql server 2019
# User      : geovindu
# Product   : PyCharm
# Project   : IctGame
# File      : dal/School.py
# explain   : 学习
from __future__ import annotations
from abc import ABC, abstractmethod
import os
import sys
from model.school import SchoolInfo
from DBUtility.MsSQLHelper import MsSqlHelper
from interface.school import ISchoolclass SchoolDal(ISchool):"""学校表                   """myms = MsSqlHelper()def __init__(self):"""构造函数,方法:param strserver::param struser::param strpwd::param strdatabase:"""self._strserver = ""self._struser = ""self._strpwd = ""self._strdatabase =""def selectSql(cls)->list:"""查询数据 self._strserver, self._struser, self._strpwd, self._strdatabase:return:"""row=cls.myms.execute("select * from School;")#cls.myms.close()return rowdef selectSqlCount(cls)->list:"""查询数据 总数:return:"""row=cls.myms.execute("select count(*) as total from School;")#cls.myms.close()return row[0]def selectSqlOrder(cls,order:str)->list:""":param order:  SchoolId desc/asc:return:"""students=[]strsql=f"select * from School order by {order};"row=cls.myms.execute(f"select * from School order by {order};")return rowdef selectSort(cls,field:str,isOrder:bool)->list:""":param field SchoolId:param order:  desc/asc:return:"""order='desc'if isOrder==True:order='desc'else:order='asc'strsql=f"select * from School order by {field} {order};"row=cls.myms.execute(f"select * from School order by {field} {order};")#cls.myms.close()return rowdef selectIdSql(cls,SchoolId:str)->list:""":param SchoolId: 主键ID:return:"""row=cls.myms.execute(f"select * from School where SchoolId='{SchoolId}';")  #考虑数据类型#cls.myms.close()return rowdef selectProc(cls)->list:"""存储过程:return:"""args = ()row = cls.myms.executeCallProc("procSelectSchoolAll",args)return rowdef selectIdProc(cls,SchoolId:str)->list:"""存储过程:param SchoolId: 主键ID:return:"""args = (SchoolId,)row = cls.myms.executeCallProc('procSelectSchool', args)return rowdef addSql(cls,info:SchoolInfo)->int:"""添加,要考虑添加返回ID值:param info:实体类:return:"""column=("SchoolId","SchoolName","SchoolTelNo")vales=[info.SchoolId,info.SchoolName,info.SchoolTelNo]return cls.myms.insertByColumnaAndValues("School",column,vales)def addProc(cls,info:SchoolInfo)->int:"""添加,要考虑添加返回ID值:param info:实体类:return:"""args=[info.SchoolId,info.SchoolName,info.SchoolTelNo]return cls.myms.insertCallProc("procInsertSchool",args)def addOutProc(cls,info:SchoolInfo) -> int:"""添加,要考虑添加返回ID值:param info:实体类:return: 返回增加的ID"""id = 0try:outid =('int',) #输出,元组类型print(info)args = [info.SchoolName,info.SchoolTelNo,outSchoolId]print(args)result=cls.myms.insertOutCallProc("procInsertSchoolOutput", args)print(result)id = resultexcept Exception as ex:print(ex)return iddef editSql(cls,info:SchoolInfo)->int:""":param info:实体类:return:"""args = {"SchoolId":f"{info.SchoolId}","SchoolName":f"{info.SchoolName}","SchoolTelNo":f"{info.SchoolTelNo}"}where = f"SchoolId={info.SchoolId}" ##print(args,where)return cls.myms.updateByKeyValues("School",where,args)def editProc(cls, info: SchoolInfo)->int:""":param info: 实体类:return:"""args = [info.SchoolId,info.SchoolName,info.SchoolTelNo]return cls.myms.updateProc("procUpdateSchool",args)def delSql(cls,SchoolId:str)->int:"""sql语句删除:param SchoolId: 主键ID:return:"""where={f"SchoolId":SchoolId}return cls.myms.deleteByKeyValues("School",where)def delProc(cls, SchoolId:str)->int:"""删除 存储过程 删除多个ID,后面增加:param SchoolId: 主键ID:return:"""args =SchoolIdk=cls.myms.deleteProc("procDuDeleteSchool", args)return k           

拼就是一个粗放的项目

相关文章:

python: generator IDAL and DAL using sql server 2019

其它数据库也是一样的思维方式 create IDAL # encoding: utf-8 # 版权所有 2024 ©涂聚文有限公司 # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述: # Author : geovindu,Geovin Du 涂聚文. # IDE : P…...

命令执行简单

前言:小迪安全2022第一节反弹shell,小迪用的是两台都是云服务器,没有服务器可以在自己的主机上搭建也是可以的,主机上搭两个网站 思路:生成一个木马文件,下载到本机,然后利用本机上传到目标主机…...

【一句话经验】亚马逊云EC2 ubuntu24.04.1开启ROOT登录Permission denied (publickey)

按照常规的方法SSH登录会一直报错: Permission denied (publickey) 因为亚马逊云的默认配置不是在/etc/ssh/sshd_config,而是在引入的文件里了,所以在instance控制台输入这行命令来解除登录限制: sudo sed -i s/^PasswordAuthe…...

百度智能云千帆大模型平台引领企业创新增长

本文整理自百度世界大会 2024——「智能跃迁 产业加速」论坛的同名演讲。 更多大会演讲内容,请访问: https://baiduworld.baidu.com 首先,跟大家分享一张图,这个是我们目前大模型应用落地的场景分布。可以看到,大模型…...

【Linux】深入理解GCC/G++编译流程及库文件管理

目录 1.背景知识 2.gcc/g如何完成编译 (1) 预处理(进行宏替换) (2) 编译(生成汇编) (3) 汇编(生成机器可识别代码) (4) 链接(生成可执行文件或库文件) (5) 总结 (6) 函数库 …...

【Unity基础】对比Unity中两种粒子系统

在Unity中,Particle System和Visual Effect Graph (VFX) 都是用于创建粒子效果的工具,但它们的设计目标、使用场景和功能特点有所不同。以下是详细对比: 1. Particle System 特点 传统粒子系统,Unity自带的模块化粒子特效工具。…...

琐碎笔记——pytest实现前置、后置、参数化、跳过用例执行以及重试

pytest的fixture中文介绍可参考(不过文档稍微有点老): https://www.osgeo.cn/pytest/fixture.html#what-fixtures-are pytest各个作用域的fixture scope “function” 可作用于每个用例 fixture使用的声明放在类定义前面,类中的…...

C# 深层副本与浅层副本 深拷贝与浅拷贝

C# 深层副本与浅层副本 数据复制是编程中的重要任务。 对象是 OOP 中的复合数据类型。 对象中的成员字段可以按值或按引用存储。 可以以两种方式执行复制。 浅表副本将所有值和引用复制到新实例中。 引用所指向的数据不会被复制; 仅指针被复制。 新的引用指向原始…...

CH06_Lambda表达式

第6章:Lambda表达式 本章目标 为什么要学习C#编程语言 了解C#相关常识 C#开发工具Visual Studio安装 掌握C#程序的开发步骤 掌握C#的注释 掌握C#的常用转义符 本章内容 lambda表达式演变史 C# 匿名函数的演变历史可以追溯到 C# 语言的不同版本,…...

大模型本地部署实践:Ollama+Open-WebUI(MacOS)

目录 什么是Ollama Ollama安装 对话界面可视化?Open-WebUI! 安装Open-WebUI 什么是Ollama Ollama是一个为简化大语言模型本地部署与交互的开源框架。它提供了用户友好的接口,帮助开发者和模型爱好者在没有依赖外部API的基础上高效地运行、…...

JavaScript——DOM编程、JS的对象和JSON

一、DOM编程 DOM(Document Object Model)编程:就是使用document对象的API,完成对网页HTML文档进行动态修改,以实现网页数据,和样式动态变化效果的编程。 (一)DOM获取元素的多种方法 1.查找元素的函数 getElementById("id值…...

SIMCom芯讯通A7680C在线升级:FTP升级成功;http升级腾讯云对象储存的文件失败;http升级私有服务器的文件成功

从事嵌入式单片机的工作算是符合我个人兴趣爱好的,当面对一个新的芯片我即想把芯片尽快搞懂完成项目赚钱,也想着能够把自己遇到的坑和注意事项记录下来,即方便自己后面查阅也可以分享给大家,这是一种冲动,但是这个或许并不是原厂希望的,尽管这样有可能会牺牲一些时间也有哪天原…...

OSRM docker环境启动

命令一把梭 wget https://download.geofabrik.de/asia/china-latest.osm.pbf docker pull osrm/osrm-backend docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-extract -p /opt/car.lua /data/china-latest.osm.pbf docker run -t -v "${PWD}:/data&q…...

Vue3 动态获取 assets 文件夹图片

我真服了Vue3 这个老六了,一个简单图片src 赋值搞得那么复杂. //item.type 是我遍历类型的类型参数 <img alt"吐槽大会" :src"getAssetUrl(item.type)" /> 基于 Vue2 的Webpack 处理,还不错,可以用/ 这种绝对路径,可以接受,虽然多了个require很不爽…...

<项目代码>YOLOv8 草莓成熟识别<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…...

代码随想录算法训练营第五十一天|Day51 图论

岛屿数量 深搜 https://www.programmercarl.com/kamacoder/0099.%E5%B2%9B%E5%B1%BF%E7%9A%84%E6%95%B0%E9%87%8F%E6%B7%B1%E6%90%9C.html 思路 #include <stdio.h> #define MAX_SIZE 50 int grid[MAX_SIZE][MAX_SIZE]; int visited[MAX_SIZE][MAX_SIZE]; int N, M; …...

uniapp 自定义加载组件,全屏加载,局部加载 (微信小程序)

效果图 全屏加载 页面加载使用 局部加载 列表加载里面使用 使用gif html <template><view><view class"" v-if"typeFullScreen"><view class"loading" v-if"show"><view class""><i…...

STM32完全学习——系统时钟设置

一、时钟框图的解读 首先我们知道STM32在上电初始化之后使用的是内部的HSI未经过分频直接通过SW供给给系统时钟&#xff0c;由于内部HSI存在较大的误差&#xff0c;因此我们在系统完成上电初始化&#xff0c;之后需要将STM32的时钟切换到外部HSE作为系统时钟&#xff0c;那么我…...

Github 2024-11-16Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-11-16统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Go项目1Python项目1Lapce:用 Rust 编写的极快且强大的代码编辑器 创建周期:2181 天开发语言:Rust协议类型:Apache License 2.0St…...

CH03_反射

第3章&#xff1a;反射 本章目标 掌握反射的原理 熟悉反射的基本运用 本章内容 反射是什么 C# 编译运行过程 首先我们在VS点击编译的时候&#xff0c;就会将C#源代码编译成程序集 程序集以可执行文件 (.exe) 或动态链接库文件 (.dll) 的形式实现 程序集中包含有Microsoft …...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

图解JavaScript原型:原型链及其分析 | JavaScript图解

​​ 忽略该图的细节&#xff08;如内存地址值没有用二进制&#xff09; 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么&#xff1a;保存在堆中一块区域&#xff0c;同时在栈中有一块区域保存其在堆中的地址&#xff08;也就是我们通常说的该变量指向谁&…...