Django之ORM表操作
ORM表操作
1.ORM单表操作
首先想操作表的增删改查,需要先导入这个表,以之前创建的UserInfo表为例,在app下的views.py中导入
from app import modelsdef query(request):new_obj = models.UserInfo(id=1,name='北北',bday='2019-09-27',checked=1,)new_obj.save()return HttpResponse('ok')
这样就创建了一条记录
增加
方式1:
obj = models.UserInfo(id = 2,name = '京京',bday = '2019-9-27',checked = '1',)
obj.save()
方式2:
ret = models.UserInfo.objects.create(name = '欢欢',bady = '2019-9-27',checked = 0,)
print(ret) #UserInfo object#ret 是创建的新的记录的model对象
ps:批量插入(bulk_create)
obj_list= []
for i in range(20):obj = models.Book(title=f"西游记{i}",price=20+i,publish_date=f"2019-09-{i+1}",publisher="人民出版社")obj_list.append(obj)models.Book.objects.bulk_create(obj_list) #批量创建从前端页面获取到的数据即:request.POST得到的是querydict类型data = request.POST.dict() --能够将querydict转换成普通的字典
创建数据时可以:models.Book.objects.create(**data)
删除
首先要通过简单查询:filter() -- 查询结果是queryset类型的数据,里面是一个个的model对象,此数据类型类似于列表
方式1:
models.UserInfo.objects.filter(id = 3).delete()
#通过queryset对象删除
方式2:
models.UserInfo.objects.filter(id = 3)[0].delete()
#通过model对象删除
修改
方式1:
models.UserInfo.objects.filter(id = 2).update(name = '英英',checked = 0,)
#通过queryset对象进行修改,而model对象不能调用update方法
方式2:
ret = models.UserInfo.objects.filter(id = 2)[0]
ret.name = '英英'
ret.checked = 0
ret.save()
查找
查询API
1.all() 查询所有结果,得到的是queryset类型ret = models.UserInfo.objects.all()2.filter(**kwargs) 它包含了与所给筛选条件相匹配的对象,结果也是queryset类型 ret = models.UserInfo.objects.filter(name='英英' checked=0)
#and多条件查询
#查询条件不能匹配到数据时,不会报错,会返回一个空的query(<QuerySet []>),如果没有写查询条件会获取所有数据,queryset类型的数据还能继续调用filter方法3.get(**kwargs) ret = models.UserInfo.objects.get(name='英英')
#得到的是一个model对象(行记录对象),有且只能有一个
#1.查不到数据会报错:UserInfo matching query does noe exist.
#2.超过一个也会报错:returned more than one UserInfo4.exclude(**kwargs) 排除,它包含了与所给筛选条件不匹配的对象,返回的时queryset类型ret = models.UserInfo.objects.exclude(name='英英')
#1.object能够调用models.UserInfo.objects.exclude(name__startswith=='贝贝')
#2.queryset类型数据能够调用models.UserInfo.objects.all().exclude(name__startswith=='贝贝')5.order_by(*filed) queryset类型的数据来调用,对查询结果排序,默认是按照id来升序排列的,返回值还是queryset类型ret = models.UserInfo.objects.all().order_by('-grade','id')
#按成绩降序排列,成绩相同的按id升序排列6.reverse() queryset类型的数据来调用,对查询结果反向排序,返回值还是queryset类型ret = models.UserInfo.objects.all().order_by().reverse()
#数据排序后才能进行反装7.count() queryset类型的数据来调用,返回数据库中匹配查询(QuerySet)的对象数量。ret = models.UserInfo.objects.all().count()8.first() queryset类型的数据来调用,返回第一条记录ret = models.UserInfo.objects.all().first()9.last() queryset类型的数据来调用,返回最后一条记录ret = models.UserInfo.objects.all().last()10.exists() queryset类型的数据来调用,如果queryset包含数据,就返回True,否则返回Falseret = models.UserInfo.objects.filter(id=9).exists()
#判断返回结果集是不是有数据11.values(*filed)
#queryset类型的数据来调用,返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列,只要是返回的queryset类型,就可以继续链式调用queryset类型的其他的查找方法,其他方法也是一样的。ret=models.UserInfo.objects.filter(id=2).values('name','bday')12.values_list(*filed)
#它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列ret=models.UserInfo.objects.all().values_list('name','bday')#调用values或者values_list的是objects控制器,那么返回所有数据
# ret = models.Book.objects.all().values()
# ret = models.Book.objects.values() 13.distinct() #values和values_list得到的queryset类型的数据来调用,从返回结果中剔除重复记录ret = models.UserInfo.objects.all().values('checked').distinct()
基于双下划线的模糊查询
ret = models.Book.objects.filter(price__gt=35) #大于
ret = models.Book.objects.filter(price__gte=35) # 大于等于
ret = models.Book.objects.filter(price__lt=35) # 小于等于
ret = models.Book.objects.filter(price__lte=35) # 小于等于
ret = models.Book.objects.filter(price__range=[35,38])
# 大于等35,小于等于38 where price between 35 and 38
ret = models.Book.objects.filter(price__in=[32,35,38])
# price值等于这三个值里面的任意一个的对象 or
ret = models.Book.objects.filter(title__contains='西游记')
# 字段数据中包含这个字符串的数据都要
ret = models.Book.objects.filter(title__icontains="python") # 不区分大小写
ret = models.Book.objects.filter(title__startswith="py")
# 以什么开头,istartswith 不区分大小写
ret = models.Book.objects.filter(publish_date='2019-09-15')
#按照日期查询查询某年某月某日:
ret = models.Book.objects.filter(publish_date__year='2018')
#2018写数字也可以
ret = models.Book.objects.filter(publish_date__year__gt='2018')
#查询出版日期大于2018年的ret = models.Book.objects.filter(publish_date__year='2019',publish_date__month='8',publish_date__day='1')
#查询出版日期为2019-8-1的找字段数据为空的双下滑线
ret = models.Book.objects.filter(publish_date__isnull=True) #这个字段值为空的那些数据
插入时间问题
在表的结构里新增列来显示时间
class UserInfo(models.Model):id = models.AutoField(primary_key=True)name = models.CharField(max_length=10)bday = models.DateField()checked = models.BooleanField()# now = models.DateTimeField(null=True)now = models.DateTimeField(auto_now_add=True,null=True)#自动插入时间now2 = models.DateTimeField(auto_now=True,null=True)# 更新记录时,自动添加更新时的时间,创建新纪录时也会帮你自动添加创建时的时间在提交后进行新增记录:
import datetime
current_date = datetime.datetime.now()
models.UserInfo.objects.create(name='妮妮',bday=current_date,now=current_date, # 自己手动直接插入时间没有时区问题checked=0)#但是如果让这个字段自动来插入时间,就会有时区的问题,auto_now_add创建记录时自动添加当前创建记录时的时间,存在时区问题
now = models.DateTimeField(auto_now_add=True,null=True)
解决方法:settings配置文件中将USE_TZ的值改为FalseUSE_TZ = False # 告诉mysql存储时间时按照当地时间来寸,不要用utc时间
使用pycharm的数据库客户端的时候,时区问题要注意更新时的auto_now参数# 更新记录时,自动更新时间,创建新纪录时也会帮你自动添加创建时的时间,但是在更新时只有使用save方法的model对象的形式更新才能自动更新时间,有缺陷,放弃now2 = models.DateTimeField(auto_now=True,null=True)
2.ORM多表操作
创建模型
表和表之间的关系
一对一、多对一、多对多 ,用book表和publish表自己来想想关系,想想里面的操作,加外键约束和不加外键约束的区别,一对一的外键约束是在一对多的约束上加上唯一约束。
实例:我们来假定下面这些概念,字段和关系
作者模型:一个作者有姓名和年龄。
作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息。作者详情模型和作者模型之间是一对一的关系(one-to-one)
出版商模型:出版商有名称,所在城市以及email。
书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);一本书只应该由一个出版商出版,所以出版商和书籍是一对多关联关系(one-to-many)。
模型建立如下:
from django.db import models# Create your models here.class Author(models.Model): '''作者表'''name=models.CharField(max_length=32)age=models.IntegerField()au=models.OneToOneField('AuthorDetail',on_delete=models.CASCADE)#就是foreignkey+unique,只不过不需要我们自己来写参数了,并且orm会自动帮你给这个字段名字拼上一个_id,数据库中字段名称为authorDetail_id# 与AuthorDetail建立一对一的关系,一对一的这个关系字段写在两个表的任意一个表里面都可以class AuthorDetail(models.Model):'''作者详细信息表'''birthday=models.DateField()telephone=models.BigIntegerField()addr=models.CharField( max_length=64)class Publish(models.Model):'''出版社表'''name=models.CharField( max_length=32)city=models.CharField( max_length=32)#class Meta:#db_table='authordetail' --指定表名#ordering=['id'] --指定排序方式#多对多的表关系,手动创建一个第三张表,然后写上两个字段,每个字段外键关联到另外两张多对多关系的表,orm的manytomany自动帮我们创建第三张表,两种方式建立关系都可以,手动创建的第三张表进行orm操作的时候,很多关于多对多关系的表之间的orm语句方法无法使用,如果想删除某张表,只需要将这个表注销掉,然后执行那两个数据库同步指令就可以了,自动就删除了。
class Book(models.Model):'''书籍表'''title = models.CharField( max_length=32)publishDate=models.DateField()price=models.DecimalField(max_digits=5,decimal_places=2)
publishs=models.ForeignKey(to='Publish',on_delete=models.CASCADE)authors=models.ManyToManyFiled('Author',)# foreignkey里面可以加很多的参数,to指向表,to_field指向你关联的字段,不写默认会自动关联主键字段,on_delete级联删除 字段名称不需要写成publish_id,orm在翻译foreignkey的时候会自动给你这个字段拼上一个_id,这个字段名称在数据库里面就自动变成了publish_id # 与Author表建立多对多的关系,ManyToManyField可以建在两个模型中的任意一个,自动创建第三张表,并且查看book表的时候,看不到这个字段,因为这个字段就是创建第三张表的意思,不是创建字段的意思,所以只能说这个book类里面有authors这个字段属性# 与Publish建立一对多的关系,外键字段建立在多的一方,字段publish如果是外键字段,那么它自动是int类型#注意不管是一对多还是多对多,写to这个参数的时候,最后后面的值是个字符串,不然你就需要将你要关联的那个表放到这个表的上面
增加
通过两种方式
一对一:
au_obj = models.AuthorDetail.objects.get(id = 4)
models.Author.objects.create(name = '韩寒',age = 32,#方式1:将对象作为值给au,也就是自动将au_obj的id赋值给au_idau = au_obj,#方式2:直接写id值#au_id = 4, )
一对多:
pub_obj = models.Publish.objects.get(id = 3)
models.Book.objects.create(title = '红楼梦',price = 160.00,publishDate = '2011-11-12',#方式1:类属性作为关键字段时,值为model对象publishs = pub_obj,#方式2:如果关键字为数据库字段名称,那么值为关联数据的值#publish_id = 3)
多对多:
new_obj = models.Book.objects.create(title = '红楼梦',price = 180.00,publishDate = '2010-08-13',publishs_id = 2,)
#方式1:
new_obj.authors.add(3,5)
# new_obj.authors.add(*[3,5]) 利用打散的方式,等同于上面的方式#方式2:
obj1 = models.Author.objects.get(id=3)
obj2 = models.Author.objects.get(id=5)
new_obj.authors.add(obj1,obj2)
删除
一对一:
models.AuthorDetail.objects.filter(id=3).delete()models.Author.objects.filter(id=3).delete()
一对多:
models.Publish.objects.filter(id=3).delete()models.Book.objects.filter(id=4).delete()
多对多:
book_obj = models.Book.objects.get(id=2)
book_obj.authors.remove(1) #指定删除
book_obj.authors.clear() #清空
book_obj.authors.set(['1','2']) #先清除在添加,相当于修改
修改
修改的方法与添加类似
ret = models.Publish.objects.get(id=2)
models.Book.objects.filter(id=5).update(title = '活着',#方式1:publishs = ret,#方式2:#publishs_id = 1,)
查询
基于对象的跨表查询
一对一查询(Author与AuthorDetail)
关系属性写在表1,关联到表2,那么通过表1的数据去找表2的数据,叫做正向查询,返过来就是反向查询# 正向查询 对象.属性# 例:查询一下韩寒的电话号码obj = models.Author.objects.filter(name='韩寒').first()ph = obj.au.telephoneprint(ph)# 反向查询 对象.小写的表名# 例:查一下电话号码为120的作者姓名obj = models.AuthorDetail.objects.filter(telephone=120).first()ret = obj.author.name print(ret)
一对多查询(Publish与Book)
#正向查询# 查询一下红楼梦这本书是哪个出版社出版的 obj = models.Book.objects.filter(title='海狗的怂逼人生').first()ret = obj.publishs.nameprint(ret) #反向查询# 查询一下 人民出版社出版过哪些书obj = models.Publish.objects.filter(name='人民出版社').first()ret = obj.book_set.all()for i in ret:print(i.title)
多对多查询(Author与Book)
# 正向查询# 查询一下红楼梦是哪些作者写的 obj = models.Book.objects.filter(title='海狗的怂逼人生').first()ret = obj.authors.all()for i in ret:print(i.name)# 反向查询# 查询一下韩寒写了哪些书 obj = models.Author.objects.filter(name='韩寒').first()ret = obj.book_set.all()for i in ret:print(i.title)#print(i.publishs.name) --查询这些书的出版社名称
3.基于双下划线的跨表查询(基于join实现的)
Django还提供了一种直观而且高效的方式在查询(lookups)中表示关联关系,它能自动确认SQL JOIN联系.要做跨关系查询,就使用双下划线来连接模型(model)间关联字段的名称,直到最终连接到需要的model
基于双下划线的查询:正向查询按字段,反向查询按表名小写来告诉orm引擎join哪张表,一对一,一对多,多对多都是一个写法(在写orm查询的时候,哪张表在前哪张表在后都没问题,因为是join连表操作)
一对一查询
查询韩寒的手机号正向查询
ret = models.Author.objects.filter(name='韩寒').values('au__telephone')反向查询
ret = models.AuthorDetail.objects.filter(author__name = '韩寒').values('telephone')
一对多查询
红楼梦是哪个出版社出版的正向查询
ret = models.Book.objects.filter(title='红楼梦').values('publishs__name')反向查询
ret = models.Publish.objects.filter(book__title='红楼梦').values('name')查询一下人民出版社出版了哪些书正向查询
ret = models.Book.objects.filter(publishs__name='人民出版社').values('title')反向查询
ret = models.Publish.objects.filter(name='人民出版社').values('book_title')
多对多查询
查询一下红楼梦是哪些作者写的正向查询
ret = models.Book.objects.filter(title='红楼梦').values('authors__name')反向查询
ret = models.Author.objects.filter(book__title='红楼梦').values('name')
related_name
反向查询时,如果定义了related_name,则用related_name替换表名,比如
publish = ForeignKey(to='publisher',related_name = 'booklist')
查询人民出版社出版过哪些书反向查询 不再按表名:book,而是related_name:booklist
ret = models.Publish.objects.filter(name='人民出版社').values('booklist__title')
4.聚合查询和分组查询
聚合查询
aggregate(*args,**kwargs)
计算所有图书的平均价格from django.db.models import Avg
ret = models.Book.objects.all().aggregate(Avg('price'))
#或者给它起名字:aggretate(a=Avg('price'))
print(ret)
#{'price__avg':34.35}
aggregate()是QuerySet的一个终止语句,意思是说,它返回一个包含一些键值对的字典.键的名称是聚合值的标识符,值是计算出来的聚合值,键的名称是按照字段和聚合函数的名称自动生成出来的.如果你想为聚合值指定一个名称,可以向聚合子句提供它.
ret = models.Book.objects.aggregate(a=Avg('price'))
print(ret)
#{'a':34.35}
如果希望生成不止一个聚合,可以向aggregate()子句中添加另一个参数,所以,可以这样查询
from django.db.models import Avg,Max,Min,Countret = models.Book.objects.aggregate(Avg('price'),Max('price'),Min('price'))
print(ret)
#{'price__avg':34.35,'price__max':Decimal('81.20'),'price__min':Decimal('12.99')}
分组查询
annotate()为调用的QuerySet中每一个对象都生成一个独立的统计值(统计方法用聚合函数)
跨表分组查询的本质就是将关联表join成一张表,再按单表的思路进行分组查询
查询每个出版社出版的书的平均价格#用publish表的id字段进行分组
ret = models.Book.objects.values('publish__id').annotate(a=Avg('price'))#用book表的publish_id字段进行分组
ret = models.Book.objects.values('publishs_id').annotate(a=Avg('price'))ret = models.Publish.objects.annotate(a=Avg('book__price')).values('a')
F查询与Q查询
F查询
假设在book表中加入两个字段:评论数:comment,收藏数:keep
Django提供F()来做这样的比较,F()的实例可以在查询中引用字段,来比较同一个model实例中两个不同字段的值
查询评论数大于收藏数的书籍from django.db.models import F
ret = models.Book.objects.filter(comment__gt=F('keep'))
Django支持F()对象之间以及F()对象和常数之间的加减乘除和取模的操作
查询评论数大于收藏数两倍的书籍ret = models.Book.objects.filter(comment__gt=F('keep')*2)
修改操作也可以使用F函数,比如将每一本书的价格提高30元
models.Book.objects.all().update(price=F('price')+30)
Q查询
filter()等方法中的关键字参数查询都是一起进行'AND'的,如果需要执行更复杂的查询(例如OR语句),可以使用Q对象
Q对象可以使用&(与), |(或) , ~(非) 操作符组合起来.当一个操作符在两个Q对象使用时,它产生一个新的Q对象
from django.db.models import Qret = models.Book.objects.filter(Q(authors__name='韩寒')|Q(authors__name='余华'))
等同于下面的SQL where子句
where name = '韩寒' or name = '余华'
可以组合使用& 和 | 操作符以及使用括号进行分组来编写任意复杂的Q对象.同时,Q对象可以使用 ~ 操作符取反,允许组合正常的查询和取反 (not)查询
ret = models.Book.objects.filter(Q(authors__name='韩寒')&~Q(publishdate__year=2017)).values_list('title')ret = models.Book.objects.filter(Q(Q(authors__name='韩寒')&~Q(publishdate__year=2017))&Q(id__gt=6)).values_list('title')
#可以使用Q嵌套,多层Q嵌套等
查询函数可以混合使用Q对象和关键字参数 .所有提供给查询函数的参数(关键字参数或Q对象)都将'AND'在一起,但是,如果出现Q对象,它必须位于所有关键字参数的前面,例如
ret = models.Book.objects.filter(Q(publishdate__year=2016) | Q(publishdate__year=2017),title='python' #也是and的关系,但是Q必须写在前面)
5.ORM执行原生SQL语句
在模型查询API不够用的情况下,我们还可以使用原始的SQL语句进行查询。
Django 提供两种方法使用原始SQL进行查询:一种是使用raw()方法,进行原始SQL查询并返回模型实例;另一种是完全避开模型层,直接执行自定义的SQL语句。
执行原生查询
raw()管理器方法用于原始的SQL查询,并返回模型的实例:
注意:raw()语法查询必须包含主键。
这个方法执行原始的SQL查询,并返回一个django.db.models.query.RawQuerySet 实例。 这个RawQuerySet 实例可以像一般的QuerySet那样,通过迭代来提供对象实例。
举个例子:
class Person(models.Model):first_name = models.CharField(...)last_name = models.CharField(...)birth_date = models.DateField(...)
可以像下面这样执行原生sql语句
for p in Person.objects.raw('SELECT * FROM myapp_person'): print(p)
raw()查询可以查询其他表的数据
举例:
ret = models.Student.objects.raw('select id, tname as hehe from app02_teacher')for i in ret:print(i.id, i.hehe)
raw()方法自动将查询字段映射到模型字段。还可以通过translations参数指定一个把查询的字段名和ORM对象实例的字段名互相对应的字典
d = {'tname': 'haha'}ret = models.Student.objects.raw('select * from app02_teacher', translations=d)for i in ret:print(i.id, i.sname, i.haha)
原生SQL还可以使用参数,注意不要自己使用字符串格式化拼接SQL语句,防止SQL注入!
d = {'tname': 'haha'}ret = models.Student.objects.raw('select * from app02_teacher where id > %s', translations=d, params=[1,])for i in ret:print(i.id, i.sname, i.haha)
直接执行自定义SQL
我们可以直接从django提供的接口中获取数据库连接,然后像使用pymysql模块一样操作数据库。
from django.db import connection, connections
cursor = connection.cursor()
# cursor = connections['default'].cursor()
cursor.execute("""SELECT * from auth_user where id = %s""", [1])
ret = cursor.fetchone()
6.python脚本中调用django环境(django外部脚本使用models)
如果想通过自己创建的python文件在django项目中使用django的models,那么就需要调用django的环境:
import osif __name__ == '__main__':os.environ.setdefault("DJANGO_SETTINGS_MODULE", "BMS.settings")import djangodjango.setup()from app01 import models #引入也要写在上面三句之后books = models.Book.objects.all()print(books)
相关文章:

Django之ORM表操作
ORM表操作 1.ORM单表操作 首先想操作表的增删改查,需要先导入这个表,以之前创建的UserInfo表为例,在app下的views.py中导入 from app import modelsdef query(request):new_obj models.UserInfo(id1,name北北,bday2019-09-27,checked1,)new_obj.save()return Htt…...
python下几个淘宝、天猫、京东爬虫实例
以下是使用Python编写的针对淘宝、天猫、京东详情页的爬虫实例。请注意,这些实例仅供参考,实际使用时可能需要根据网站结构的变化进行调整,并且需要遵守各平台的爬虫协议和法律法规。 淘宝详情页爬虫实例 环境准备: Python 3.xSe…...

级联树结构TreeSelect和上级反查
接口返回结构 前端展示格式 前端组件 <template><div ><el-scrollbar height"70vh"><el-tree :data"deptOptions" :props"{ label: label, children: children }" :expand-on-click-node"false":filter-node-me…...

gradle下载慢解决方案2024 /12 /1android studio (Windows环境)
gradle下载慢解决方案2024 /12 /1 默认环境配置好了,环境配置和程序安装请出门右转 打开软件,点击右上角设置,找到如下设置页 选择本地安装并制定好你已经安装好的 gradle 应用保存即可 全局插件环境配置(新版本可以直接在设置中添加了) 找对应位置添加国内源并把前面的内置源…...
Python+OpenCV系列:GRAY BGR HSV
以下是 GRAY、BGR 和 HSV 三种色彩空间的对比,涵盖了它们的定义、特点、应用场景和优缺点: 1. 定义 GRAY: 灰度图像仅包含亮度信息,每个像素用一个值(通常在0到255之间)表示亮度(黑到白&#x…...
丢垃圾视频时间检测 -- 基于状态机的实现
文章目录 OverviewKey PointsPseudo-code Overview 需要考虑的方面 状态定义和转换条件时序约束空间约束异常处理 状态机的设计需要考虑的场景: 没有人人进入人携带垃圾人离开但垃圾留下垃圾消失异常情况(检测失败、多人多垃圾等) Key P…...

【QT】一个简单的串口通信小工具(QSerialPort实现)
目录 0.简介 1.展示结果 1)UI界面: 2)SSCOM(模拟下位机收发): 3)VSPD虚拟串口驱动(连接上位机和下位机的串口): 4)实际收发消息效果及视频演…...

24/12/5 算法笔记<强化学习> doubleDQN,duelingDQN
我们前面了解了DQN网络的一些知识,然而DQN还有一些改进的方法,比如doubleDQN和duelingDQN,我们先来将一下doubleDQN和DQN. 先来对比一下 单一网络 vs. 双重网络 DQN:是一个深度神经网络来估计每个动作的Q值 DDQN:使用两个独立的深度神经网络…...
道可云人工智能元宇宙每日资讯|全国工商联人工智能委员会成立会议在南京举办
道可云元宇宙每日简报(2024年12月5日)讯,今日元宇宙新鲜事有: 全国工商联人工智能委员会成立会议在南京举办 全国工商联人工智能委员会成立会议日前在江苏省南京市举办。中央统战部副部长、全国工商联党组书记沈莹出席会议并讲话…...

MySQL数据库(2)-检查安装与密码重置
1. 数据库下载安装 下载地址:MySQL :: Download MySQL Community Server 2. My.ini配置文件 my.ini 文件通常在MySQL安装过程中自动创建, 并且可以根据需要进行编辑以调整服务器的行为。 3. 配置环境变量 4. 查询版本号 查询版本号:mysql…...
C# 13 中的新增功能
C# 12 中的新增功能C# 11 中的新增功能C# 10 中的新增功能C# 9.0 中的新增功能C# 8.0 中的新增功能C#7.0中有哪些新特性?C#6.0中10大新特性的应用和总结C# 5.0五大新特性 将C#语言版本升级为预览版 C# 13 包括一些新增功能。 可以使用最新的 Visual Stu…...

视频自学笔记
一、视频技术基本框架 二、视频信号分类 2.1信号形式 2.1.1模拟视频 模拟视频是指由连续的模拟信号组成的视频图像,以前所接触的电影、电视都是模拟信号,之所以将它们称为模拟信号,是因为它们模拟了表示声音、图像信息的物理量。摄像机是获…...

easyexcel 导出日期格式化
1.旧版本 在新的版本中formate已经被打上废弃标记。那么不推荐使用这种方式。 2.推荐方式 推荐使用另外一种方式【 Converter 】代码如下,例如需要格式化到毫秒【yyyy-MM-dd HH:mm:ss SSS】级别 创建一个公共Converter import com.alibaba.excel.converters.Conv…...

02-开发环境搭建
02-开发环境搭建 鸿蒙开发环境的准备主要分为以下环节: 注册开发者实名认证创建应用下载安装开发工具新建工程 注册开发者 在华为开发者联盟网站上,注册成为开发者,并完成实名认证。 打开华为开发者联盟官网,点击“注册”进入…...

DBeaver导入csv到数据库
DBeaver的图标是一只小浣熊,查了下Beaver确实是浣熊的意思,看起来还是蛮可爱的。 业务上有需要导入csv到数据库的需求,试用了下,发现挺好用的。有很多属性可以定制。 导入步骤: 1.建表,表字段与待导入cs…...
React第十一节 组件之间通讯之发布订阅模式(自定义发布订阅器)
组件之间通讯常用方案 1、通过props 2、通过context 3、通过发布订阅模式 4、通过Redux 后面会有专栏介绍 什么情况下使用发布订阅模式 a、当我们想要兄弟组件之间通讯,而共同的父组件中又用不到这些数据时候; b、当多个毫无相关的组件之间想要进行数据…...
tcpreplay/tcpdump-重放网络流量/捕获、过滤和分析数据包
tcpdump 是一个网络数据包分析工具,通过捕获并显示网络接口上传输的数据包,帮助用户分析网络流量。 原理:用户态通过 libpcap 库控制数据包捕获,内核态通过网卡驱动获取数据包。 核心功能包括:捕获、过滤和分析数据包…...
ASPICE评估体系概览:对象、范围与参考标准解析
ASPICE(汽车软件过程改进和能力确定)是一个框架,它被广泛应用于汽车行业的软件开发和维护过程的改进。 它类似于软件工程领域的CMMI(能力成熟度模型集成),但专门针对汽车行业,考虑了该行业特有…...

力扣92.反转链表Ⅱ
题目描述 题目链接92. 反转链表 II 给你单链表的头指针 head 和两个整数 left 和 right ,其中 left < right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。 示例 1: 输入:head [1,2,3,4,5], left …...
Java设计模式之适配器模式:深入JDK源码探秘Set类
在Java编程中,Set类作为一个不允许存储重复元素的集合,广泛应用于数据去重、集合运算等场景。然而,你是否曾好奇Set类是如何在底层实现元素唯一性判断的?这背后隐藏的力量正是适配器模式。 适配器模式简介 适配器模式࿰…...

Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...

【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释
以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块࿰…...