当前位置: 首页 > 编程日记 > 正文

model多表操作

一. 创建模型

from django.db import models# Create your models here.#比较常用的作者信息放到这个表里面
class Author(models.Model): id = models.AutoField(primary_key=True)name=models.CharField(max_length=32)age=models.IntegerField()authorDetail=models.OneToOneField(to="AuthorDetail",to_field="id",on_delete=models.CASCADE)# 与AuthorDetail建立一对一的关系,一对一的这个关系字段写在两个表的任意一个表里面都可以#就是foreignkey+unique,只不过不需要我们自己来写参数了,并且orm会自动帮你给这个字段名字拼上一个_id,数据库中字段名称为authorDetail_id#不常用的放到这个表里面
class AuthorDetail(models.Model):id = models.AutoField(primary_key=True)birthday=models.DateField()telephone=models.BigIntegerField()addr=models.CharField(max_length=64)class Publish(models.Model):id = models.AutoField(primary_key=True)name=models.CharField( max_length=32)city=models.CharField( max_length=32)email=models.EmailField()#多对多的表关系,我们学mysql的时候是手动创建一个第三张表,然后写上两个字段,每个字段外键关联到另外两张多对多关系的表,orm的manytomany自动帮我们创建第三张表,两种方式建立关系都可以,以后的学习我们暂时用orm自动创建的第三张表,因为手动创建的第三张表我们进行orm操作的时候,很多关于多对多关系的表之间的orm语句方法无法使用
#如果你想删除某张表,你只需要将这个表注销掉,然后执行那两个数据库同步指令就可以了,自动就删除了。
class Book(models.Model):id = models.AutoField(primary_key=True)title = models.CharField( max_length=32)publishDate=models.DateField()price=models.DecimalField(max_digits=5,decimal_places=2)publish=models.ForeignKey(to="Publish",to_field="nid",on_delete=models.CASCADE) # 与Publish建立一对多的关系,外键字段建立在多的一方,字段publish如果是外键字段,那么它自动是int类型#foreignkey里面可以加很多的参数,都是需要咱们学习的,慢慢来,to指向表,to_field指向你关联的字段,不写这个,默认会自动关联主键字段,on_delete级联删除,字段名称不需要写成publish_id,orm在翻译foreignkey的时候会自动给你这个字段拼上一个_id,这个字段名称在数据库里面就自动变成了publish_id
    authors=models.ManyToManyField(to='Author',)#与Author表建立多对多的关系,ManyToManyField可以建在两个模型中的任意一个,自动创建第三张表,并且注意一点,你查看book表的时候,你看不到这个字段,因为这个字段就是创建第三张表的意思,不是创建字段的意思,所以只能说这个book类里面有authors这个字段属性#注意不管是一对多还是多对多,写to这个参数的时候,最后后面的值是个字符串,不然你就需要将你要关联的那个表放到这个表的上面        
View Code

参数和原信息:

参数:1. 一对一(OneToOneField):to设置要关联的表。to_field设置要关联的字段。on_delete同ForeignKey字段。2. 一对多(ForeignKey):to设置要关联的表to_field设置要关联的表的字段related_name反向操作时,使用的字段名,用于代替原反向查询时的'表名_set'。related_query_name反向查询操作时,使用的连接前缀,用于替换表名。on_delete当删除关联表中的数据时,当前表与其关联的行的行为。3. 多对多(ManyToManyField):to设置要关联的表related_name同ForeignKey字段。related_query_name同ForeignKey字段。through在使用ManyToManyField字段时,Django将自动生成一张表来管理多对多的关联关系。但我们也可以手动创建第三张表来管理多对多关系,此时就需要通过through来指定第三张表的表名。through_fields设置关联的字段。db_table默认创建第三张表时,数据库中表的名称。   元信息ORM对应的类里面包含另一个Meta类,而Meta类封装了一些数据库的信息。主要字段如下:class Author2Book(models.Model):author = models.ForeignKey(to="Author")book = models.ForeignKey(to="Book")class Meta:unique_together = ("author", "book")db_tableORM在数据库中的表名默认是 app_类名,可以通过db_table可以重写表名。index_together联合索引。unique_together联合唯一索引。ordering指定默认按什么字段排序。只有设置了该属性,我们查询到的结果才可以被reverse()。    
View Code

注意事项:

1. 表的名称是根据模型中的元数据自动生成的,也可以覆写为别的名称 
 
  2. id 字段是自动添加的

  3. 对于外键字段,Django 会在字段名上添加"_id" 来创建数据库中的列名

  4. 这个例子中的CREATE TABLE SQL 语句使用PostgreSQL 语法格式,要注意的是Django 会根据settings 中指定的数据库类型来使用相应的SQL 语句。

  5. 定义好模型之后,你需要告诉Django _使用_这些模型。你要做的就是修改配置文件中的INSTALL_APPSZ中设置,在其中添加model所在应用的名称。

  6. 外键字段 ForeignKey 有一个 null=True 的设置(它允许外键接受空值 NULL),你可以赋给它空值 None 。

on_delete

on_delete当删除关联表中的数据时,当前表与其关联的行的行为。models.CASCADE删除关联数据,与之关联也删除models.DO_NOTHING删除关联数据,引发错误IntegrityErrormodels.PROTECT删除关联数据,引发错误ProtectedErrormodels.SET_NULL删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)models.SET_DEFAULT删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)models.SET删除关联数据,a. 与之关联的值设置为指定值,设置:models.SET(值)b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)
View Code

二. 添加表记录

1. 一对多

方式1:publish_obj = models.Publish.objects.get(id=1)book_obj = models.Book.objects.create(title="金瓶眉",publishDate="2012-12-12",price=100,publish=publish_obj) #出版社对象作为值给publish,其实就是自动将publish字段变成publish_id,然后将publish_obj的id给取出来赋值给publish_id字段,注意你如果不是publish类的对象肯定会报错的
  
方式2:book_obj = models.Book.objects.create(title="金瓶眉",publishDate="2012-12-12",price=100,publish_id=1)  #直接可以写id值,注意字段属性的写法和上面不同,这个是publish_id=xxx,上面是publish=xxx。
View Code

2. 多对多

方式一: 多对多一般在前端页面上使用的时候是多选下拉框的样子来给用户选择多个数据,这里可以让用户选择多个书籍,多个作者# 当前生成的书籍对象book_obj=models.Book.objects.create(title="追风筝的人",price=200,publishDate="2012-11-12",publish_id=1)# 为书籍绑定的作者对象yuan=models.Author.objects.filter(name="yuan").first() egon=models.Author.objects.filter(name="alex").first() # 绑定多对多关系,即向关系表book_authors中添加纪录,给书添加两个作者,下面的语法就是告诉orm给第三张表添加两条数据
    book_obj.authors.add(yuan,egon)    #  将某些特定的 model 对象添加到被关联对象集合中。 book_obj.authors.add(*[])#有人可能会说,我们可以直接给第三张表添加数据啊,这个自动生成的第三张表你能通过models获取到吗,是获取不到的,用不了的,当然如果你知道了这个表的名字,那么你通过原生sql语句可以进行书的添加,所以要通过orm间接的给第三张表添加数据,如果是你手动添加的第三张表你是可以直接给第三张表添加数据#book_obj是书籍对象,authors是book表里面那个多对多的关系字段名称。#其实orm就是先通过book_obj的authors属性找到第三张表,然后将book_obj的id值和两个作者对象的id值组合成两条记录添加到第三张表里面去
    
方式二:book_obj.authors.add(1,2)book_obj.authors.add(*[1,2]) #这种方式用的最多,因为一般是给用户来选择,用户选择是多选的,选完给你发送过来的就是一堆的id值
View Code

三. 删除和更新表记录

    book_obj.authors.remove()              # 将某个特定的对象从被关联对象集合中去除。   book_obj.authors.remove(*[1,2])#将多对多的关系数据删除
    book_obj.authors.clear()               #清空被关联对象集合
    book_obj.authors.set()                 #先清空再设置   
book_obj = models.Book.objects.filter(id=4)[0]book_obj.authors.remove(2) #将第三张表中的这个book_obj对象对应的那个作者id为2的那条记录删除
    book_obj.authors.set('2') #先清除掉所有的关系数据,然后只给这个书对象绑定这个id为2的作者,所以只剩下一条记录3---2,比如用户编辑数据的时候,选择作者发生了变化,那么需要重新选择,所以我们就可以先清空,然后再重新绑定关系数据,注意这里写的是字符串,数字类型不可以
    book_obj.authors.set(['1',])#这么写也可以,但是注意列表中的元素是字符串
    
更新:book_obj = models.Book.objects.get(id=1) #获取一个书籍对象data = {'title':'xxx','price':100} #这个书籍对象更新后的数据models.Book.objects.filter(id=n).update(**data) #将新数据更新到原来的记录中book_obj.authors.set(author_list) #将数据和作者的多对多关系加上

删除:models.Book.objects.filter(id=1).delete()
View Code

四. 基于对象的跨表查询(mysql中的子查询)

正向查询按属性

反向查询按表名(小写)

1. 一对一查询(Author -- AuthorDetail) 正向查询(按字段:authorDetail):查询egon的电话号码tel = models.Author.objects.filter(name="egon").first().authorDetail.tel# egon.authorDeail就拿到了这个对象,因为一对一找到的就是一条记录,注意写法:作者对象.字段名,就拿到了那个关联对象
    反向查询(按表名:author):不需要_set,因为一对一正向反向都是找到一条记录查询住址在北京的作者的姓名authorr_name = models.AuthorDetail.objects.filter(addr="beijing")[0].author.name2. 一对多查询(Book -- Publish)正向查询(按字段:publish):关联属性字段所在的表查询被关联表的记录就是正向查询,反之就是反向查询查询id为1的书籍的出版社所在的城市city = models.Book.objects.filter(pk=1).first().publish.city# book_obj.publish 是id为1的书籍对象关联的出版社对象,book对象.外键字段名称
    反向查询(按表名:book_set,因为加上_set是因为反向查询的时候,你查询出来的可能是多条记录的集合):查询苹果出版社出版的所有图书的名字book_list = models.Publish.objects.get(name="苹果出版社").book_set.all()#publish.book_set.all() : 与苹果出版社关联的所有书籍对象集合,写法:小写的表名_set.all(),得到queryset类型数据for book_obj in book_list:print(book_obj.title)3. 多对多查询(Book -- Author)正向查询(按字段:authors):金瓶眉所有作者的名字以及手机号authors = models.Book.objects.filter(title="金瓶眉").first().authors.all()for author_obj in authors:print(author_obj.name,author_obj.authorDetail.tel)反向查询(按表名:book_set):查询egon出过的所有书籍的名字book_list = models.Author.objects.get(name="egon").book_set.all()for book_obj in book_list:print(book_obj.title)注意:你可以通过在 ForeignKey() 和ManyToManyField的定义中设置 related_name 的值来覆写 FOO_set 的名称。例如,如果 Article model 中做更改:publish = ForeignKey(Book, related_name='bookList')那么接下来就会如我们看到这般:查询人民出版社出版过的所有书籍book_list = models.Publish.objects.get(name="人民出版社").bookList.all()在这里我们补充一点,因为你很快就要接触到了,那就是form表单里面的button按钮和form表单外面的button按钮的区别,form表单里面的button按钮其实和input type='submit'的标签是有同样的效果的,都能够提交form表单的数据,但是如果放在form表单外面的button按钮,那就只是个普通的按钮了。<button>提交</button>,还有一点,input type='submit'按钮放到form表单外面那就成了一个普通的按钮。
View Code

五. 基于双下划綫的跨表查询(mysql中的join连表操作)

Django 还提供了一种直观而高效的方式在查询(lookups)中表示关联关系,它能自动确认 SQL JOIN 联系。要做跨关系查询,就使用两个下划线来链接模型(model)间关联字段的名称,直到最终链接到你想要的model 为止。

基于双下划线的查询就一句话:正向查询按字段,反向查询按表名小写用来告诉ORM引擎join哪张表,一对一、一对多、多对多都是一个写法,注意,我们写orm查询的时候,哪个表在前哪个表在后都没问题, 因为走得是join连表操作

1. 一对一查询(Author -- AuthorDetail)查询yuan的手机号正向查询 按字段:tel = models.Author.objects.filter(name="yuan").values("authorDetail__telephone")反向查询 按表名:authorret = models.AuthorDetail.objects.filter(author__name="yuan").values("telephone")2. 一对多查询(Book -- Publish):查询苹果出版社出版过的所有书籍的名字与价格正向查询 按字段:publishqueryResult = models.Book.objects.filter(publish__name="苹果出版社").values_list("title","price")  #values或者values_list#通过__告诉orm将book表和publish表进行join,然后找到所有记录中publish.name='苹果出版社'的记录(注意publish是属性名称),然后select book.title,book.price的字段值
             反向查询 按表名:bookqueryResult = models.Publish.objects.filter(name="苹果出版社").values_list("book__title","book__price")3. 多对多查询(Book -- Author):查询yuan出过的所有书籍的名字正向查询 按字段:authors:queryResult = models.Book.objects.filter(authors__name="yuan").values_list("title")反向查询 按表名:bookqueryResult = models.Author.objects.filter(name="yuan").values_list("book__title","book__price")4. 进阶练习(连续跨表)查询人民出版社出版过的所有书籍的名字以及作者的姓名正向查询queryResult = models.Book.objects.filter(publish__name="人民出版社").values_list("title","authors__name")反向查询queryResult = models.Publish.objects.filter(name="人民出版社").values_list("book__title","book__authors__name")手机号以151开头的作者出版过的所有书籍名称以及出版社名称正向查询queryResult = models.Book.objects.filter(authors__authorDetail__tel__regex="^151").values_list("title","publish__name")反向查询  ret = models.Author.objects.filter(authordetail__telephone__startswith="151").values("book__title","book__publish__name")5. related_name反向查询时,如果定义了related_name ,则用related_name替换 表名,例如:publish = ForeignKey(Blog, related_name='bookList')查询人民出版社出版过的所有书籍的名字与价格反向查询 不再按表名:book,而是related_name:bookListqueryResult = models.Publish.objects.filter(name="人民出版社").values_list("bookList__title","bookList__price") 
View Code

转载于:https://www.cnblogs.com/guyannanfei/p/10467928.html

相关文章:

cocos2d-x注意事项(十)Lua发展飞机战争-4-创建主角

二战中被称为二战飞机飞机&#xff0c;当然&#xff0c;以飞机作业。这是一个游戏&#xff0c;我们必须加入一个飞机——这是我们的英雄。 首先创建一个层&#xff08;PlaneLayer&#xff09;要显示飞机。然后&#xff0c;create飞机初始化方法 module("PlaneLayer",…

.PHONY makefile中的伪目标

拿clean举例&#xff0c;如果make完成后&#xff0c;自己另外定义一个名叫clean的文件&#xff0c;再执行make clean时&#xff0c;将不会执行rm命令。 为了避免出现这个问题&#xff0c;需要.PHONY: clean所谓伪目标就是这样一个目标&#xff0c;它不代表一个真正的文件名&…

jq父级绑定事件的意义_jq——事件

$(document),$(body)加载事件&#xff1a;$(document).ready(fn)$(document).ready(function(){ alert("这是加载事件"); });简写&#xff1a;$(function(){});工作中简写比较多js:window.οnlοadfn 把页面上的DOM和资源加载完成之后执行jq:$(document).ready(fn)…

美妆彩妆宣传PPT模板

还有四天就是三八妇女节了&#xff0c;相信有不少从事美妆美容行业的工作者也要开始对产品的一个宣传简介了&#xff0c;对外进行一番交流配上一份优秀的PPT模板是再好不过的了。今天办公资源要和大家分享的PPT模板是可用于美妆美容美发行业的工作策划&#xff0c;总结汇报等。…

报表性能优化方案之报表服务器优化基础讲解

内存 JVM堆栈内存是决定应用服务器性能的关键指标&#xff0c;一般服务器默认的内存配置都比较小&#xff0c;在较大型的应用项目中&#xff0c;这点内存是不够的&#xff0c;因此需要进行查看与修改Web服务器内存大小&#xff0c;接下来就介绍服务器内存查看的方法以及不同服务…

windows下git bash乱码问题

网上有很多相关资料&#xff0c;备份一下&#xff1a; 1,/etc/gitconfig&#xff1a;[gui] encoding utf-8 #代码库统一用urf-8,在git gui中可以正常显示中文[i18n] commitencoding GB2312 #log编码&#xff0c;window下默认gb2312,声明后发到服务器才不会乱码[svn] …

python tcp server分包_如何创建线程池来监听tcpserver包python

我试图创建线程池来同时对传入的tcp包执行一些操作。在我在python3中找不到任何内置线程池。我也读了一些关于multiprocessing.Pool的文章&#xff0c;但是它不支持内存共享。所以我使用Queue来模拟线程池。在为每个线程创建一个队列是否更好&#xff1f;有没有人有建议或更好的…

R语言 股价分析

首先判断股价的分布是不是正态分布: #获取3m公司收盘价 mmmdata read.csv("E:\\kuaipan\\A Introduction to Analysis of Financial Data with R\\chapter 1\\ch1data\\d-mmm-0111.txt",header T) mmmprice as.numeric(sapply(mmmdata, function(l){substring(l,1…

JavaのFile类基础操作之问题

在上一章节&#xff0c;介绍了File类的基础操作&#xff0c;比如文件的创建&#xff0c;文件的删除等等。这一章节&#xff0c;将介绍在File类基础操作中遇到的问题。 1.路径分割符问题 在实际的软件开发与运行过程中&#xff0c;往往都会在Windows环境下进行项目的开发&#x…

把时间当作朋友(第一版)笔记

平生第一次下载并阅读了电子版的关于学习类型的书籍&#xff0c;并且用软件&#xff08;MindManager)记录了读书摘要&#xff08;其实最多能叫摘录&#xff09;&#xff0c;不过也不妨碍我发篇随笔记录下。 平常&#xff0c;我更喜欢读纸质的书籍&#xff0c;用日志本记录笔记&…

python中执行linux命令(调用linux命令)_Python调用Linux bash命令

import subprocess as sup # 以下注释很多(为了自己以后不忘), 如果只是想在python中执行Linux命令, 看前5行就够了# 3.5版本之后官方推荐使用sup.run()sup.run("ls -l", shellTrue) # 如果参数args是字符串, shell要设置为Truesup.run(("ls", "-l&…

IOS中CoreLocation框架地理定位

1.CoreLocation框架使用前提&#xff1a; #import <CoreLocation/CoreLocation.h> CoreLocation框架中所有数据类型的前缀都是CL &#xff0c;CoreLocation中使用CLLocationManager对象来做用户定位 2.CLLocationManager的常用操作&#xff1a; 开始用户定位 - (void)sta…

Your First Concordion.Net Project (Part 5)-Running Specs with Gallio

http://living-in-concordion.blogspot.com/2009/05/your-first-concordionnet-project-part-5.html 需要一些自动运行Spec的Runner&#xff0c;这里采用的为Gallio写的一个插件。 Gallio是一个开源的测试框架&#xff0c;能够运行各种.net的测试框架&#xff0c;具有较高的扩展…

Vue学习的路径

接下来我将正式学习Vue,根据Vue作者所给的学习路径进行学习。每天做好学习笔记。​ vue学习路径和建议----尤雨溪 ​ vue官网

ssh mysql环境搭建 myeclipse_MyEclipse整合ssh三大框架环境搭载用户注册源码下载

前言SSH不是一个框架&#xff0c;而是多个框架(strutsspringhibernate)的集成&#xff0c;是目前较流行的一种Web应用程序开源集成框架&#xff0c;用于构建灵活、易于扩展的多层Web应用程序。集成SSH框架的系统从职责上分为四层&#xff1a;表示层、业务逻辑层、数据持久层和域…

IIS7.5 HTTP 错误 500 调用loadlibraryex失败的解决方法

在IIS7.5打开网页的时候&#xff0c;提示&#xff1a; HTTP 错误 500.0 - Internal Server Error 调用 LoadLibraryEx 失败&#xff0c;在 ISAPI 筛选器 C:\Windows\Microsoft.NET\Framework\v4.0.30319\\aspnet_filter.dll,经过排除发现原来是两个斜杠导致在IIS7.5打开网页的时…

Android学习笔记之progressBar(进度条)

一、说明 <1>在某项延续性工作的进展过程中为了不让用户觉得程序死掉了&#xff0c;需要有个活动的进度条&#xff0c;表示此过程正在进行中。 <2>在某些操作的进度中的可视指示器&#xff0c;为用户呈现操作的进度&#xff0c;还它有一个次要的进度条&#xff0c;…

在hadoop上运行python_hadoop上运行python程序

数据来源&#xff1a;http://www.nber.org/patents/acite75_99.zip首先上传测试数据到hdfs&#xff1a;[rootlocalhost:/usr/local/hadoop/hadoop-0.19.2]#bin/hadoopfs -ls /user/root/test-inFound 5 items-rw-r--r-- 1root supergroup101 2010-10-24 14:39 /user/root/test-…

leetcode 237: Delete Node in a Linked List

题目&#xff1a; Write a function to delete a node (except the tail) in a singly linked list, given only access to that node. Supposed the linked list is 1 -> 2 -> 3 -> 4 and you are given the third node with value 3, the linked list should become…

一次奇怪的AP注册异常问题处理

很久没遇到值得分享的经验&#xff0c;今天遇到一个问题&#xff0c;处理过程很有意思&#xff0c;和大家一起分享一下。有一个客户部署华三的一套无线&#xff0c;采用控制器瘦AP的方式。部署过程都是轻车熟路&#xff0c;配置全部完成&#xff0c;静等AP上线&#xff0c;这时…

今天是第一次开博客,for--futurechild!!!

今天刚刚开了一个博客&#xff0c;或许觉得每一个比较牛叉的人都会经历一个不平凡的过程。通往高手之路是一个及其不平凡的路途。学校教育不能培养出真正高手。学习的最高境界是---悟。自己一步一个脚印最终能到达高手的殿堂。当然&#xff0c;我也希望能记录下自己的这个过程。…

memcache php mysql_PHP中的数据库二、memcache

在一个高并发的web应用中&#xff0c;数据库存取瓶颈一直是个大问题&#xff0c;一旦达到某个极限&#xff0c;数据库很容易崩溃&#xff0c;但是如果我们把常用的数据放到内存中&#xff0c;在需要的时候从内存中取&#xff0c;不光读取速度快&#xff0c;而且节约数据库IO。m…

JavaScript sync and async(同步和异步)

推荐四篇文章&#xff1a; JavaScript 是单线程的深入分析JavaScript 运行机制详解&#xff1a;再谈 Event LoopJavaScript 异步编程的4种方法JavaScript 既是单线程又是异步的&#xff0c;请问这二者是否冲突&#xff0c;以及有什么区别&#xff1f;一个重要前提&#xff1a;J…

掌握 MySQL 这 19 个骚操作,效率至少提高3倍

本文我们来谈谈项目中常用的MySQL优化方法&#xff0c;共19条&#xff0c;利用好这19条方法&#xff0c;会让你的效率提升至少3倍。1、EXPLAIN做MySQL优化&#xff0c;我们要善用EXPLAIN查看SQL执行计划。下面来个简单的示例&#xff0c;标注&#xff08;1、2、3、4、5&#xf…

对于PS和flash协作做过光字的一点心得

上次一个朋友要求要帮忙帮他网站BANNER上面做个透明的过光字FLASH&#xff0c;要求必须是PS处理的字的效果再用过光字做成FLASH。。。 导入PS生成的文字效果PNG透明图片&#xff0c;直接新建图层&#xff0c;放下面&#xff0c;画个过光的效果&#xff0c;结果没有过光效果&…

mysql 5.6 binlog_format_ROW 格式binlog 在MySQL5.6上的数据恢复实验

5.6和5.7版本的MySQL&#xff0c;有个参数binlog_row_image&#xff0c;默认值为FULL&#xff0c;表示记录的是全部的binlog操作日志(仅在binlog_formatROW时候生效)。此外binlog_row_image还可以是minimal&#xff0c;表示binlog记录的就只是影响后的行。如此一来使用ROW格式就…

Appium学习笔记2_Android获取元素篇

在利用Appium做自动化测试时&#xff0c;最重要的一步就是获取对应的元素值&#xff0c;根据元素来对对象进行对应的操作&#xff0c;如果获得对象元素呢&#xff1f; Appium Server Console其实提供了一个界面对话框"Inspector",但是一般情况下&#xff0c;它无法获…

C#制作安装包

软件项目编码完工后,接下来就是制作安装包了.有一些人对制作安装包不屑一顾,但我认为这是软件工程中必不可少的环节,就如何包装商品一样.我曾经经过一个星期的研究,学会了如何制作安装包. 我做的一个安装包是可以操作配置文件的,具体步骤如下: 1)在我已经开发好的解决方案项目…

ThunderGBM:快成一道闪电的梯度提升决策树

想在 GPU 上使用使用闪电般快速的提升方法&#xff1f;了解这个库就好了。在很多任务上&#xff0c;它都比 LightGBM 和 XGBoost 快。尽管近年来神经网络复兴并大为流行&#xff0c;但提升算法在训练样本量有限、所需训练时间较短、缺乏调参知识等场景依然有其不可或缺的优势。…

cyclicbarrier java_Java并发编程之CyclicBarrier和线程池的使用

原标题&#xff1a;Java并发编程之CyclicBarrier和线程池的使用下面我们来讲述一下线程池和CyclicBarrier的使用和对比。一、场景描述有四个游戏玩爱好者玩游戏&#xff0c;游戏中有三个关卡&#xff0c;每一个关卡必须让所有玩家到达后才能允许通过。其实这个场景里的玩家中如…