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

Django(ORM事务操作|ORM常见字段类型|ORM常见字段参数|关系字段|Meta元信息)

文章目录

  • ORM事务操作
    • 什么是事务?
    • 事务的产生
    • 事务的四大特征
    • ORM中如何使用事务
  • ORM字段类型
    • 常用字段与不常用字段类型
    • ORM还支持用户自定义字段类型
  • ORM字段参数
  • 关系字段
    • ForeignKey外键
    • on_delete参数设置的值
  • OneToOneField与ForeignKey的区别
  • 多对多关系建立的方式
  • ORM中执行SQL语句
  • Meta元信息

ORM事务操作

什么是事务?

事务是用户定义的一系列数据库操作,这些操作可以视为一个完整的逻辑处理工作单元。
要么全部执行,要么全部不执行,是不可分割的工作单元

事务的产生

	数据库中的数据是共享资源,因此数据库系统通常要支持多个用户的或不同应用程序的访问,并且各个访问进程都是独立执行的,这样就有可能出现并发存取数据的现象,为了避免数据库的不一致性这种处理机制称之为"并发控制",其中事务就是为了保证数据的一致性而产生的的一种概念和手段(事务不是唯一手段)

事务的四大特征

为了保证数据库的正确性与一致性事务具有四个特征

  1. 原子性(Atomicity)

    • 事务的原子性保证事务中包含的一组更新操作是原子的,不可分割的。不可分割是事务最小的工作单位
    • 所包含的操作被视为一个整体,执行过程中遵循着:要么全部执行,要么全部不执行,不存在一半执行一半未执行的情况
  2. 一致性(Consistency)

    • 事务的一致性要求事务必须满足数据库的完整性约束
    • 且事务执行完毕后会将数据库由一个一致性的状态变为另一个一致性的状态,事务的一致性与原子性是密不可分的
  3. 隔离性(Isolation)

    • 事务的隔离性要求事务之间是彼此独立的,隔离的,及一个事务的执行不可以被其他事务干扰
  4. 持久性(Durability)

    • 事务的持续性也称为持久性,是指一个事务一旦提交,它对数据库的改变将是永久性的
    • 因为数据刷进了物理磁盘了,其他操作将不会对它产生任何影响

相关SQL关键字:start transaction; rollback; commit; savapoint;

相关重要概念:脏读、幻读、不可重复读、MVCC多版本控制


ORM中如何使用事务

django,ORM中提供了至少三种开启事务的方式

方式一:全局开启事务

	配置文件数据库(DATABASE)相关添加键值对   全局有效"ATOMIC_REQUESTS":True每次请求所涉及到的ORM操作同属于一个事务'如果过程中报错了,就会往回滚'

方式二:装饰器 局部有效

	from django.db import transaction # 引入事务模块@transaction.atomic  # 原子装饰器def index():passeg:from django.db import transaction@transaction.atomicdef index():model.book.objects.create(title='简爱',price='345',publish_id=1)hhshhsldlllds   # 报错>>>就会过滚return HttpResponse('添加成功')return 123  #在事务里面,这也算成功'''​ 装饰器针对的是视图函数,当视图函数需要设计ORM操作,如果函数从上往下执行,遇到报错会自动回滚到视图函数开始的状态。'''

方式三:with 上下文管理 局部有效

	from django.db import transactiondef reg():with transaction.atomic():pass  # 这下面看作是同一个事务处理,遇到报错就会回滚

ORM字段类型

名称含义
AutoField()Int自增列 必须填入参数 primary_key=True
当model中如果没有自增列 则自动会创建一个列名为id的列
CharField()字符类型 必须提供max_length参数 max_length表示字符长度
IntegerField()一个整数类型 范围在 -2147483648 to 2147483647
(一般不用它来存手机号(位数也不够) 直接用字符串存)
BigIntegerField()长整型(有符号的) -9223372036854775808 ~ 9223372036854775807
DateField()日期字段 日期格式 YYYY-MM-DD 相当于Python中的datetime.date()实例
DateTimeField()日期时间字段 格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] 相当于Python中datetime.datetime()实例
DecimalField()10进制小数
参数 max_digits 小数总长度
decimal_places,小数位长度
EmailField()字符串类型 Django Admin以及ModelForm中提供验证机制
BooleanField()布尔值类型 传布尔值存数字0或1
TextField()文本类型 存储大段文本
FileField()字符串 路径保存在数据库 文件上传到指定目录
参数 upload_to = " " 上传文件的保存路径
storage = None 存储组件 默认django.core.files.storage.FileSystemStorage
ForeignKey()外键类型在ORM中用来表示外键关联关系 一般把ForeignKey字段设置在 '一对多’中’多’的一方
ForeignKey可以和其他表做关联关系同时也可以和自身做关联关系
OneToOneField()一对一字段 通常一对一字段用来扩展已有字段
通俗的说就是一个人的所有信息不是放在一张表里面的,简单的信息一张表,隐私的信息另一张表,之间通过一对一外键关联
ManyToManyField()简单来说就是在多对多表关系并且这一张多对多的关系表是有Django自动帮你建的情况下 下面的方法才可使用create add set remove clear

需要说明的是,这些ORM字段并非与SQL字段一一对应,有些是封装了一些逻辑功能在字段的创建、存储过程中。

常用字段与不常用字段类型

AutoField(Field)
- int自增列,必须填入参数 primary_key=TrueBigAutoField(AutoField)
- bigint自增列,必须填入参数 primary_key=True注:当model中如果没有自增列,则自动会创建一个列名为id的列
from django.db import modelsclass UserInfo(models.Model):
# 自动创建一个列名为id的且为自增的整数列
username = models.CharField(max_length=32)class Group(models.Model):
# 自定义自增列
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)SmallIntegerField(IntegerField):
- 小整数 -3276832767PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
- 正小整数 032767
IntegerField(Field)
- 整数列(有符号的) -21474836482147483647PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
- 正整数 02147483647BigIntegerField(IntegerField):
- 长整型(有符号的) -92233720368547758089223372036854775807BooleanField(Field)
- 布尔值类型NullBooleanField(Field):
- 可以为空的布尔值CharField(Field)
- 字符类型
- 必须提供max_length参数, max_length表示字符长度TextField(Field)
- 文本类型EmailField(CharField)- 字符串类型,Django Admin以及ModelForm中提供验证机制IPAddressField(Field)
- 字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制GenericIPAddressField(Field)
- 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6
- 参数:
protocol,用于指定Ipv4或Ipv6, 'both',"ipv4","ipv6"
unpack_ipv4, 如果指定为True,则输入::ffff:192.0.2.1时候,可解析为192.0.2.1,开启此功能,需要protocol="both"URLField(CharField)
- 字符串类型,Django Admin以及ModelForm中提供验证 URLSlugField(CharField)
- 字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号)CommaSeparatedIntegerField(CharField)
- 字符串类型,格式必须为逗号分割的数字UUIDField(Field)
- 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证FilePathField(Field)
- 字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能
- 参数:
path,                      文件夹路径
match=None,                正则匹配
recursive=False,           递归下面的文件夹
allow_files=True,          允许文件
allow_folders=False,       允许文件夹FileField(Field)
- 字符串,路径保存在数据库,文件上传到指定目录
- 参数:
upload_to = ""      上传文件的保存路径
storage = None      存储组件,默认django.core.files.storage.FileSystemStorageImageField(FileField)
- 字符串,路径保存在数据库,文件上传到指定目录
- 参数:
upload_to = ""      上传文件的保存路径
storage = None      存储组件,默认django.core.files.storage.FileSystemStorage
width_field=None,   上传图片的高度保存的数据库字段名(字符串)
height_field=None   上传图片的宽度保存的数据库字段名(字符串)DateTimeField(DateField)
- 日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]DateField(DateTimeCheckMixin, Field)
- 日期格式      YYYY-MM-DDTimeField(DateTimeCheckMixin, Field)
- 时间格式      HH:MM[:ss[.uuuuuu]]DurationField(Field)
- 长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为datetime.timedelta类型FloatField(Field)
- 浮点型DecimalField(Field)
- 10进制小数
- 参数:
max_digits,小数总长度
decimal_places,小数位长度BinaryField(Field)
- 二进制类型

对应关系

    'AutoField': 'integer AUTO_INCREMENT','BigAutoField': 'bigint AUTO_INCREMENT','BinaryField': 'longblob','BooleanField': 'bool','CharField': 'varchar(%(max_length)s)','CommaSeparatedIntegerField': 'varchar(%(max_length)s)','DateField': 'date','DateTimeField': 'datetime','DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)','DurationField': 'bigint','FileField': 'varchar(%(max_length)s)','FilePathField': 'varchar(%(max_length)s)','FloatField': 'double precision','IntegerField': 'integer','BigIntegerField': 'bigint','IPAddressField': 'char(15)','GenericIPAddressField': 'char(39)','NullBooleanField': 'bool','OneToOneField': 'integer','PositiveIntegerField': 'integer UNSIGNED','PositiveSmallIntegerField': 'smallint UNSIGNED','SlugField': 'varchar(%(max_length)s)','SmallIntegerField': 'smallint','TextField': 'longtext','TimeField': 'time','UUIDField': 'char(32)',

ORM还支持用户自定义字段类型

	class FixedCharField(models.Field):  '类名随便取'"""自定义的char类型的字段类"""def __init__(self, max_length, *args, **kwargs):self.max_length = max_lengthsuper(FixedCharField, self).__init__(max_length=max_length, *args, **kwargs)'回调之前的init方法'def db_type(self, connection):"""限定生成数据库表的字段类型为char,长度为max_length指定的值"""return 'char(%s)' % self.max_lengthclass Class(models.Model):id = models.AutoField(primary_key=True)title = models.CharField(max_length=25)# 使用自定义的char类型的字段cname = FixedCharField(max_length=25)

ORM字段参数

任意字段都可以设置的参数

名称含义
null用于表示某个字段可以为空。设置方式:null = True
unique用于表示该字段值在此表中必须是唯一的,建立唯一索引,设置方式:unique = True
db_index将该字段设置为索引,设置方式:db_index = True
default为该字段的默认值,设置方式:default = ‘默认值’
db_column在数据库中的字段名称,默认和变量同名,设置方式:db_column=‘字段名’
primary_key设置字段为主键,设置方式:primary_key = True。通常id字段为主键,且唯一主键

日期字段参数

名称含义
unique_for_date日期必须唯一
unique_for_month月份必须唯一
unique_for_year年份必须唯一
auto_now_add增加记录时的时间
auto_now更新当前记录的时间

用于Admin后台管理参数

名称含义
verbose_nameAdmin中显示的字段名称
blankAdmin中是否允许用户输入为空
editableAdmin中是否可以编辑
help_textAdmin中该字段的提示信息
choicesAdmin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
(设置方式:choice=((1,‘男’),(2,‘女’),(0,‘未知’)) )

其他参数

名称含义
max_length最大长度
verboses_name别名
max_digits数字中允许的最大的数字位数
decimal_places数字的小数位数
unique=True如果设置为unique=True 则该字段在此表中必须是唯一的

关系字段

表之间的关系由一对一、一对多、多对多来确定的

ForeignKey外键

通过外键来绑定各个表字段之间的关系

  • to:关联哪张表、设置方式to = ‘关联表名’

  • to_field:关联表的哪个字段(默认关联主键)

  • related_name:反向查询时使用的字段名,用于代替原来反向查询的表名_set

  • related_query_name:反向查询操作时 使用的连接前缀,用于代替表名。相当于给表设置了一个别名

on_delete参数设置的值

  • models.CASCADE:删除关联数据,与之关联也删除

  • models.DO_NOTHING:删除关联数据,引发错误IntegrityError

  • models.PROTECT:删除关联数据,引发错误ProtectedError

  • models.SET_NULL:删除关联数据,搭配null = True使用,使之关联的值为null

  • models.SET_DEFAULT:删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)

  • models.SET:删除关联数据,设置为一个传递给SET()的值或者一个回调函数的返回值,注意大小写

db_constraint:保留跨表查询的方式,但是在table之间不建立外键关联(但是在Django内可以有一个关联状态,可以在admin里面看到),一般都设置为 False,减少过多的约束。此时on_delete参数需要设置为models.SET_NULLblank=Truenull=True允许字段为空,这样即使关联的外键数据被删除了,也只会将字段设置为null


OneToOneField与ForeignKey的区别

OneToOneField用于一对一关系的表之间进行关联。

根据Django官方文档介绍:

A one-to-one relationship. Conceptually, this is similar to a ForeignKey with unique=True, but the “reverse” side of the relation will directly return a single object.

OneToOneField与ForeignKey加上unique=True效果基本一样,但是用OneToOneField反向关联会直接返回对象。

相反地,使用ForeignKey, 反向关联后会返回QuerySet。

例如:Book表通过ForenignKey与Publish表建立了外键

	obj = models.Publish.objects.filter(pk=1).first()print(obj.book_set.all()) # 通过ForenignKey进行关联所以反向查询必须要加表名小写_set.all()执行结果:拿到的是一个QuerySet对象<QuerySet [<Book: Book object (1)>, <Book: Book object (2)>]>

Author表通过OneToOneField与AuthorDeatil表建立了外键

	obj = models.AuthorDeatil.objects.filter(pk=1).first()print(obj.author) # 通过OneToOneField进行关联的反向查询不需要_set.all()执行结果:Author object (1)

多对多关系建立的方式

两张表之间多对多的关系通常需要借助第三张表来存储,这样也更利于我们查询。而第三张表的建立有三种方式:

  • 第一种:自动创建(常用:但是创建出来的第三张表没有其它字段,只存有这两张表的主键相互对应关系)
  • 第二种:半手动创建(比较常用:第三张表我们可以建立其它字段,但也不影响两张表的关联)
  • 第三种:完全手动建立第三张表。

第一种方式:通过ORM自带的ManyToManyField自动创建第三张表

	class Book(models.Model):title = models.CharField(max_length=32, verbose_name="书名")class Author(models.Model):name = models.CharField(max_length=32, verbose_name="作者姓名")books = models.ManyToManyField(to="Book", related_name="authors")# 每次可以将Author表与Book表对应关系的主键值存储到第三张表

这种建立第三张表具备多个:多对多关系操作API

author_obj.books.add():括号内填写与作者关联的书籍对象 或者 书籍的主键值
author_obj.books.set():清空该作者原来关联的书籍,传入一个可迭代对象(里面可以包含一个或多个书籍对象 或者 书籍主键值)
author_obj.books.clear():清空该作者关联的书籍
author_obj.books.remove():移除该作者关联的某个书籍


第二种方式:自己创建第三张表,并通过ManyToManyField指定关联

	class Book(models.Model):title = models.CharField(max_length=32, verbose_name="书名")class Author(models.Model):name = models.CharField(max_length=32, verbose_name="作者姓名")books = models.ManyToManyField(to="Book", through="Author2Book", through_fields=("author", "book"))# through_fields 元组的第一个值是ManyToManyField所在的表去中间表通过那个字段,就写在第一个位置。我们要通过author字段去中间表,因为authorclass Author2Book(models.Model):author = models.ForeignKey(to="Author")book = models.ForeignKey(to="Book")

through:指定我们手动创建的中间表

through_fields:指定关联字段,设置方式通过元组,值也就是关联第三张表的哪几个字段,注意先后顺序:如果book写在前面则表示我们从Author表到中间表要通过book字段,那么就会乱套了


第三种方式:自己创建第三张表,分别通过外键关联书和作者

	class Book1(models.Model):title = models.CharField(max_length=32, verbose_name="书名")class Author1(models.Model):name = models.CharField(max_length=32, verbose_name="作者姓名")class Author2Book1(models.Model):author = models.ForeignKey(to="Author")book = models.ForeignKey(to="Book")

这种方式创建的多对多关系很多API操作都用不了,需要手动指定,如果要跨表查询将不能通过obj.表名小写或者obj.表名小写_set.all(),而是每次都要通过中间表来实现。


ORM中执行SQL语句

在Django的ORM中我们也是可以使用原生SQL来进行操作的,其实我们并不能完全依赖于ORM框架来提供给我们操作数据库的便利,因为ORM在很多语言中使用形式都会有些不同,而SQL语句则是不变的。

实例:我们不需要管是基于什么对象来执行SQL语句,查出什么字段就可以直接使用

	res = models.Author.objects.raw('select * from app01_book where id > 1')for book in res:print(book.name,book.price,book.publish_time)执行结果:Python爬虫从入门到入狱 666.5 2023-11-24MySQL从入门到删库跑路 880.0 2023-10-24

总结:执行原生sql,跟对象类型无关了,查出什么字段,可以直接使用该字段。

ps:但是基于的不同对象执行SQL语句,得到的结果也会是不同的,有些字段数据还是用不了

Meta元信息

Meta是Django模型类里面的一个内部类,它用于定义一些Django模型类的行为特性。

	定义方式:class Author(models.Model):class Meta:pass

通常在里面定义变量来代表选项,而可用的选项大致包含以下几类:
1、db_table
自定义表名(通常表名都是由Django帮助我们创建的,且是由:项目_类名组合的)


2、index_together
为多个字段建立联合索引,设置方式:index_together = (‘name’,‘age’)


3、unique_together
当需要通过两个字段保持模型唯一性时使用,假设有一个 User 类,我们希望 User 的 username 和 email 两个属性的组合必须是唯一的,那么需要设置为:

	unique_together = (("username", "email"),)

当某个一行记录:username='jack'email='123@qq.com,那么其它行就不能同时这两个字段值都设置的和那一行一样。

unique_together 的值是一个元组的元组。为了方便起见,处理单一字段的集合时unique_together 可以是一维的元组

	unique_together = ("driver", "restaurant")

这样就确保了driverrestaurant字段值是唯一的


4、ordering
根据哪个字段排序,设置方式:ordering = (‘id’,)


可配置参数

属性描述
db_table = ‘xxx’修改表名为xxx
ordering = ‘xxx’ 按照指定字段xxx排序
verbose_name = ‘xxx’给模型类指定一个直观可读的信息xxx
verbose_name_plural = verbose_name设置verbose_name的复数
abstract = True设置模型类为一个基类(不会生成为表,只作为继承使用)
permissions = ((‘定义好的权限’, ‘权限说明’),)给数据库的表设置额外的权限
managed = False是否按照django既定的规则来管理模型类
unique_together = (‘address’, ‘note’)联合唯一键,约束
app_label = ‘xxx’定义模型类属于哪一个应用
db_tablespace定义数据库表空间的名字

相关文章:

Django(ORM事务操作|ORM常见字段类型|ORM常见字段参数|关系字段|Meta元信息)

文章目录 ORM事务操作什么是事务&#xff1f;事务的产生事务的四大特征ORM中如何使用事务 ORM字段类型常用字段与不常用字段类型ORM还支持用户自定义字段类型 ORM字段参数关系字段ForeignKey外键on_delete参数设置的值 OneToOneField与ForeignKey的区别多对多关系建立的方式ORM…...

【mujoco】Ubuntu20.04配置mujoco210

【mujoco】Ubuntu20.04配置mujoco210 文章目录 【mujoco】Ubuntu20.04配置mujoco2101. 安装mujoco2102. 安装mujoco-py3.使用render时报错Reference 本文简要介绍一下如何在ubuntu20.04系统中配置mujoco210&#xff0c;用于强化学习。 1. 安装mujoco210 在官方资源里找到http…...

【洛谷 P3853】[TJOI2007] 路标设置 题解(二分答案+循环)

[TJOI2007] 路标设置 题目背景 B 市和 T 市之间有一条长长的高速公路&#xff0c;这条公路的某些地方设有路标&#xff0c;但是大家都感觉路标设得太少了&#xff0c;相邻两个路标之间往往隔着相当长的一段距离。为了便于研究这个问题&#xff0c;我们把公路上相邻路标的最大…...

蓝桥杯 vector

vector的定义和特性 注意&#xff1a;vector需要开C11标准 vector的常用函数 push_back():将元素添加到vector末尾 pop_back():删除vector末尾的元素 begin()和end():返回指向vector第一个元素和最后一个元素之后一个位置的迭代器。 示例 vector<int> vec{10,20,30};f…...

ai绘画部署教程

在部署AI绘画Web环境的过程中&#xff0c;你提供了一些关键步骤。以下是一些详细说明&#xff1a; 1. 克隆webui 首先&#xff0c;通过以下命令从GitHub上克隆webui的代码&#xff1a; git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui 这将下载webui的源…...

策略模式的应用——应对频繁的需求变更

秋招结束后&#xff0c;间接性堕落了一段时间&#xff0c;学习几乎停止下来了。内心甚是焦灼&#xff0c;感觉生活很无趣&#xff01;为了在参加工作后能够快速上手和成为一名优秀的中级开发者&#xff0c;从这篇文章开始将不断学习优秀的编码经验&#xff0c;学习是永无止境的…...

qt-C++笔记之treeWidget初次使用

qt-C笔记之treeWidget初次使用 code review! 文章目录 qt-C笔记之treeWidget初次使用1.运行2.文件结构3.main.cpp4.widget.h5.widget.cpp6.widget.ui7.main.qrc8.qt_widget_test.pro9.options.png 1.运行 2.文件结构 3.main.cpp 代码 #include "widget.h"#include…...

SQL零基础入门教程,贼拉详细!贼拉简单! 速通数据库期末考!(八)

FULL OUTER JOIN 除了前面讲到的 INNER JOIN&#xff08;内连接&#xff09;、LEFT JOIN&#xff08;左连接&#xff09;、RIGHT JOIN&#xff08;右连接&#xff09;&#xff0c;还有另外一种关联方式&#xff0c;即 FULL OUTER JOIN&#xff08;全外连接&#xff09; FULL O…...

C语言编程陷阱(八)

陷阱36:不要使用指针作为函数的返回值 有时候,我们可能想要用一个函数来返回一个指针,比如返回一个动态分配的内存,或者返回一个数组的某个元素的地址。但是,如果我们不小心,我们可能会犯一个很常见的错误,就是返回一个局部变量的地址。例如,看看下面的代码: #inclu…...

客户端性能优化实践

背景 双十一大促时&#xff0c;客户客服那边反馈商品信息加载卡顿&#xff0c;在不断有订单咨询时&#xff0c;甚至出现了商品信息一直处于加载状态的情况&#xff0c;显然&#xff0c;在这种高峰期接待客户时&#xff0c;是没法进行正常的接待工作的。 起初&#xff0c;页面一…...

mysql使用--表达式和函数

1.表达式 如&#xff1a;11&#xff0c;一般包含操作数&#xff0c;运算符。 _1.操作数 MYSQL中最常用的操作数有以下几种 (1).常数 (2).列名&#xff0c;针对某个具体的表&#xff0c;它的列名可被当作表达式的一部分 (3).函数调用 一个函数用于完成某个特定的功能。比如NOW()…...

<蓝桥杯软件赛>零基础备赛20周--第6周--数组和队列

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周&#xff08;读者可以按…...

软件开发、网络空间安全、人工智能三个方向的就业和前景怎么样?哪个方向更值得学习?

软件开发、网络空间安全、人工智能这三个方向都是当前及未来的热门领域&#xff0c;每个领域都有各自的就业前景和价值&#xff0c;以下是对这三个方向的分析&#xff1a; 1、软件开发&#xff1a; 就业前景&#xff1a;随着信息化的加速&#xff0c;软件开发的需求日益增长。…...

新增文章分类

pojo.Category package com.lin.springboot01.pojo;import jakarta.validation.constraints.NotEmpty; import lombok.Data;import java.time.LocalDateTime;Data public class Category {private Integer id;//主键NotEmptyprivate String categoryName;//分类名称NotEmptypr…...

选硬币该用动态规划

选硬币&#xff1a; 现有面值分别为1角1分&#xff0c;5分&#xff0c;1分的硬币&#xff0c;请给出找1角5分钱的最佳方案。 #include <iostream> #include <vector>std::vector<int> findChange(int amount) {std::vector<int> coins {11, 5, 1}; /…...

LeetCode 2342. 数位和相等数对的最大和:哈希表

【LetMeFly】2342.数位和相等数对的最大和&#xff1a;哈希表 力扣题目链接&#xff1a;https://leetcode.cn/problems/max-sum-of-a-pair-with-equal-sum-of-digits/ 给你一个下标从 0 开始的数组 nums &#xff0c;数组中的元素都是 正 整数。请你选出两个下标 i 和 j&…...

Vulkan渲染引擎开发教程 一、开发环境搭建

一 安装 Vulkan SDK Vulkan SDK 就是我们要搞的图形接口 首先到官网下载SDK并安装 https://vulkan.lunarg.com/sdk/home 二 安装 GLFW 窗口库 GLFW是个跨平台的小型窗口库&#xff0c;也就是显示窗口&#xff0c;图形的载体 去主页下载并安装&#xff0c;https://www.glfw.…...

(带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程

源码简介&#xff1a; 1、会员管理&#xff1a; 该系统分为三个级别的会员流程&#xff1a;总站管理员、代理与会员&#xff08;会员有普通会员、中级会员和高级会员三个等级&#xff09;。总站管理员可以添加代理用户并为其充值余额&#xff0c;代理用户可以为普通用户充值余…...

IDEA 快捷键汇总

目录 1、altinsert 2、ctrl/ 3、altenter 4、alt回车 5、ctrlD 6、ctrlaltL 7、ctrl点击 8、alt左键向下拉 9、ctrlaltv 10、ctrlaltwint 1、altinsert 快速创建代码&#xff0c;可以快速创建类中get set tostring等方法 2、ctrl/ 单行注释 3、altenter…...

目标检测YOLO实战应用案例100讲-基于机器视觉的水稻病虫害监测预警

目录 前言 国内外研究现状 国外研究现状 国内研究现状 2 相关理论与技术...

OrthoNets:正交信道注意网络

文章目录 摘要1、简介2、相关工作3、方法4、实验设置及结果5、论述6、结论摘要 链接:https://arxiv.org/pdf/2311.03071v2.pdf 设计有效的通道注意力机制要求人们找到一种有损压缩方法,以实现最佳特征表示。尽管该领域近年来取得了进展,但仍然存在一个未解决的问题。FcaNet…...

C_12练习题

一、单项选择题(本大题共20小题,每小题2分&#xff0c;共40分。在每小题给出的四个备选项中&#xff0c;选出一个正确的答案&#xff0c;并将所选项前的字母填写在答题纸的相应位置上。) C 风格的注释&#xff0c;也称块注释或多行注释&#xff0c;以&#xff08;&#xff09;…...

导航守卫有哪三种?

导航守卫主要分为三种&#xff1a; 全局前置守卫&#xff1a;使用 router.beforeEach 注册&#xff0c;作用是在路由切换开始前进行拦截和处理&#xff0c;可以用来进行一些全局的权限校验、登录状态检查等操作。 全局解析守卫&#xff1a;使用 beforeResolve 注册&#xff0c…...

强烈 推荐 13 个 Web前端在线代码IDE

codesandbox.io&#xff08;国外&#xff0c;提供免费空间&#xff09; 网址&#xff1a;https://codesandbox.io/ CodeSandbox 专注于构建完整的 Web 应用程序&#xff0c;支持多种流行的前端框架和库&#xff0c;例如 React、Vue 和 Angular。它提供了一系列增强的功能&…...

网络协议 WebSocket

一、介绍 WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c; 并进行双向数据传输 1、HTTP协议和WebSocket协议对比 HTTP 是短连接WebSocket 是长连接H…...

路径操作 合法路径名

python中路径的三种合法表示&#xff1a;在路径前面加上r、分隔符使用/。 在路径前面加上r python中在前面加上r&#xff0c;是防止字符转义。 例如&#xff1a;这样一个路径&#xff1a; \Undergraduate\School\Programme\Python_Learnpython会将这个字符串的**\和\后面的…...

JavaEE初阶 01 计算机是如何工作的

前言 今天开始进行对JavaEE的一些基本总结,希望大家能在阅读中有所收获,如有错误还望多多指正. 1.冯诺依曼体系结构 这个体系结构相信学计算机的同学都不陌生,但是你真的知道这个体系结构说的是什么嘛?请听我娓娓道来.首先我先给出一张冯诺依曼体系结构的简图 你可以理解为当前…...

【shell 常用脚本30例】

先了解下编写Shell过程中注意事项 开头加解释器&#xff1a;#!/bin/bash语法缩进&#xff0c;使用四个空格&#xff1b;多加注释说明。命名建议规则&#xff1a;全局变量名大写、局部变量小写&#xff0c;函数名小写&#xff0c;名字体现出实际作用。默认变量是全局的&#xf…...

【我和Python算法的初相遇】——体验递归的可视化篇

&#x1f308;个人主页: Aileen_0v0 &#x1f525;系列专栏:PYTHON数据结构与算法学习系列专栏&#x1f4ab;"没有罗马,那就自己创造罗马~" 目录 递归的起源 什么是递归? 利用递归解决列表求和问题 递归三定律 递归应用-整数转换为任意进制数 递归可视化 画…...

【C语言的秘密】密探—深究C语言中多组输入的秘密!

场景引入&#xff1a; 你是否在刷题过程中&#xff0c;经常遇到以下场景呢&#xff1f; 场景一&#xff1a; 场景二&#xff1a; 从这些题上都能看见输入描述中提出了一条多组输入&#xff0c;那啥是多组输入&#xff1f;如何实现它呢&#xff1f; 多组输入&#xff1a;在输入…...

ClickHouse 语法优化规则

ClickHouse 的 SQL 优化规则是基于RBO(Rule Based Optimization)&#xff0c;下面是一些优化规则 1 准备测试用表 1&#xff09;上传官方的数据集 将visits_v1.tar和hits_v1.tar上传到虚拟机&#xff0c;解压到clickhouse数据路径下 // 解压到clickhouse数据路径 sudo tar -xvf…...

3-运行第一个docker image-hello world

CentOS7.9下安装完成docker后,我们开始部署第一个docker image-hello world 1.以root用户登录CentOS7.9服务器,拉取centos7 images 命令: docker pull hello-world [root@centos79 ~]# docker pull hello-world Using default tag: latest latest: Pulling from library…...

【漏洞复现】泛微e-Weaver SQL注入

漏洞描述 泛微e-Weaver&#xff08;FANWEI e-Weaver&#xff09;是一款广泛应用于企业数字化转型领域的集成协同管理平台。作为中国知名的企业级软件解决方案提供商&#xff0c;泛微软件&#xff08;广州&#xff09;股份有限公司开发和推广了e-Weaver平台。 泛微e-Weaver旨在…...

「git 系列」git 如何存储代码的?

这里写自定义目录标题 git 文件存储位置git 数据模型示例分析分析前准备命令哈希值 具体示例 不同版本的提交&#xff0c;git 做了什么工作&#xff1f;snapshot vs delta-based vs backup参考资料 git 文件存储位置 想要了解如何存储&#xff0c;首先需要知道存储位置。 当我…...

IDEA 集成 Docker 插件一键部署 SpringBoot 应用

目录 前言IDEA 安装 Docker 插件配置 Docker 远程服务器编写 DockerFileSpringBoot 部署配置SpringBoot 项目部署结语 前言 随着容器化技术的崛起&#xff0c;Docker成为了现代软件开发的关键工具。在Java开发中&#xff0c;Spring Boot是一款备受青睐的框架&#xff0c;然而&…...

IDEA无法查看源码是.class,而不是.java解决方案?

问题&#xff1a;在idea中&#xff0c;ctrl鼠标左键进入源码&#xff0c;但是有时候会出现无法查看反编译的源码&#xff0c;如图&#xff01; 而我们需要的是方法1: mvn dependency:resolve -Dclassifiersources 注意&#xff1a;需要该模块的目录下&#xff0c;不是该文件目…...

机器视觉系统选型-定光照强度

同一个外形结构的光源&#xff0c;光照强度受如下影响&#xff1a; 单颗灯珠的亮度灯珠排列的数量和密度漫射板/防护板的材质&#xff08;透明、半透明、全漫射&#xff09; 在合理范围内提升光照强度&#xff0c;可降低对相机曝光时长的要求 外形结构尺寸相同的两款光源&am…...

ChatGLM3-6B:新一代开源双语对话语言模型,流畅对话与低部署门槛再升级

项目设计集合&#xff08;人工智能方向&#xff09;&#xff1a;助力新人快速实战掌握技能、自主完成项目设计升级&#xff0c;提升自身的硬实力&#xff08;不仅限NLP、知识图谱、计算机视觉等领域&#xff09;&#xff1a;汇总有意义的项目设计集合&#xff0c;助力新人快速实…...

StoneDB顺利通过中科院软件所 2023 开源之夏 结项审核

近日&#xff0c;中科院软件所-开源软件供应链点亮计划-开源之夏2023的结项名单正式出炉&#xff0c;经过三个月的项目开发和一个多月的严格审核&#xff0c;共产生 418个成功结项项目&#xff01;其中&#xff0c;StoneDB 作为本次参与开源社区&#xff0c;社区入选的两个项目…...

Linux本地docker一键部署traefik+内网穿透工具实现远程访问Web UI管理界面

文章目录 前言1. Docker 部署 Trfɪk2. 本地访问traefik测试3. Linux 安装cpolar4. 配置Traefik公网访问地址5. 公网远程访问Traefik6. 固定Traefik公网地址 前言 Trfɪk 是一个云原生的新型的 HTTP 反向代理、负载均衡软件&#xff0c;能轻易的部署微服务。它支持多种后端 (D…...

SpringCloud FeignClient声明式服务调用采坑记录(A调用服务B/C,B/C重启后必须重启A后才能成功调用配置项)

SpringCloud FeignClient声明式服务调用&#xff08;A调用服务B/C&#xff0c;B/C重启后必须重启A后才能成功调用配置项采坑记录&#xff09; 1. 报错&#xff08;info级别的警告信息&#xff09;2. 原因&#xff1a;使用了默认了cache负载均衡&#xff0c;或者禁用了ribbonLoa…...

安装银河麒麟linux系统docker(docker-compose)环境,注意事项(一定能解决,有环境资源)

1&#xff1a;安装docker环境必须使用麒麟的版本如下 2&#xff1a;使用docker-compse up -d启动容器遇到的文件 故障1&#xff1a;如果运行docker-compose up 报“Cannot create redo log files because data files are corrupt or the database was not shut down cleanly a…...

BUG:编写springboot单元测试,自动注入实体类报空指针异常

原因:修饰测试方法的Test注解导入错误 造成错误的原因是 import org.junit.Test;正确的应该是 import org.junit.jupiter.api.Test前者是Junit4,后者是Junit5 junit4的使用似乎要在测试类除了添加SpringbootTest还要添加RunWith(SpringRunner.class) 同时要注意spring-boot-s…...

深度解析 InterpretML:打开机器学习模型的黑箱

深度解析 InterpretML&#xff1a;打开机器学习模型的黑箱 机器学习模型的高性能往往伴随着模型的复杂性&#xff0c;这使得模型的决策过程变得不透明&#xff0c;难以理解。在这个背景下&#xff0c;可解释性机器学习成为了一个备受关注的领域。本文将介绍 InterpretML&#…...

数据结构初阶leetcodeOJ题(二)

目录 第一题 思路&#xff1a; 第二题 思路 第三题 描述 示例1 思路 总结&#xff1a;这种类似的题&#xff0c;都是用快慢指针&#xff0c;相差一定的距离然后输出慢指针。 第一题 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val…...

若依框架数据源切换为pg库

一 切换数据源 在ruoyi-admin项目里引入pg数据库驱动 <dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>42.2.18</version> </dependency>修改配置文件里的数据源为pg spring:d…...

java 访问sqlserver 和 此驱动程序不支持jre1.8错误

sqlserver数据如下&#xff1b; TestSQL.java&#xff1b; import java.sql.*;public class TestSQL {public static void main(String[] args) throws ClassNotFoundException, SQLException {String driverName "com.microsoft.sqlserver.jdbc.SQLServerDriver";…...

C/C++字符判断 2021年12月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C字符判断 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C字符判断 2021年12月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 对于给定的字符&#xff0c;如果该字符是大小写字母或…...

Kotlin语言实现单击任意TextVIew切换一个新页面,并且实现颜色变换

<LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:orientation"vertical"android:layout_height"match_parent"><!-- 这里放置你的其他视图组件 -->&…...

Flume学习笔记(4)—— Flume数据流监控

前置知识&#xff1a; Flume学习笔记&#xff08;1&#xff09;—— Flume入门-CSDN博客 Flume学习笔记&#xff08;2&#xff09;—— Flume进阶-CSDN博客 Flume 数据流监控 Ganglia 的安装与部署 Ganglia 由 gmond、gmetad 和 gweb 三部分组成。 gmond&#xff08;Ganglia …...