首页
关于
友链
Search
1
ESXI 一些功能调整
222 阅读
2
天翼云网关3.0/4.0超管密码
182 阅读
3
SoftEther 客户端篇
177 阅读
4
ESXi安装黑群晖
141 阅读
5
SoftEther 服务端篇
127 阅读
默认分类
代码相关
vue
html
python
系统
数据库
docker
安卓
软件分享
杂七杂八的工具
游戏分享
游戏相关
我的家庭影院
登录
Search
标签搜索
python
esxi
git
SoftEther
linux
apscheduler
在线
rclone
Ubuntu
list
列表
idm
激活码
Charles
pdf
免安装
鲁大师
图片查看器
蜂蜜浏览器
honeyview
哥特式
累计撰写
85
篇文章
累计收到
12
条评论
首页
栏目
默认分类
代码相关
vue
html
python
系统
数据库
docker
安卓
软件分享
杂七杂八的工具
游戏分享
游戏相关
我的家庭影院
页面
关于
友链
搜索到
71
篇与
的结果
2023-05-08
Centos7命令
1. 修改IPvi /etc/sysconfig/network-scripts/ifcfg-ens192里面的参数:BOOTPROTO="static" IPADDR=本机ip NETMASK=掩码 GATEWAY=网关 DNS1=dns服务器重启网关systemctl restart network2. 设置自启systemctl daemon-reload # 设置自启 systemctl enable ** # 启动服务 systemctl start ** # 查看运行状态 systemctl status **3. lastb相关# 提取出IP地址并去重 lastb | awk '{print $3}' | sort | uniq # 查看最近10条 lastb -10 # 清空lastb echo > /var/log/btmp4. 重新获取网络信息ip addr flush dev ens192 && dhclient -r ens192 && dhclient ens192 && systemctl restart network
2023年05月08日
70 阅读
0 评论
0 点赞
2023-05-06
宝塔面板开心版
# Centos安装脚本: yum install -y wget && wget -O install.sh http://bt.cxinyun.com/install/install_6.0.sh && sh install.sh # Ubuntu/Debian安装脚本: wget -O install.sh http://bt.cxinyun.com/install/install_6.0.sh && bash install.sh # Linux面板7.9.9升级命令: curl https://bt.cxinyun.com/install/update6.sh|bash
2023年05月06日
61 阅读
1 评论
0 点赞
2023-04-30
docker的一些操作
重建容器docker-compose build -no--cache rabbitmq创建容器docker-compose up -d查看容器日志命令docker logs -f <容器名字>进入容器内部docker exec -it <容器名字> bash更新用Docker-compose部署的应用很简单,只要三步。第一步进入到你docker-compose所在的文件夹下,执行docker-compose pull第二步重启你的容器docker-compose up -d --remove-orphans第三步(可选)删除掉旧的镜像docker image prune docker 配置 hosts1、在这个文件里面修改下面的配置/etc/docker/daemon.json{"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"], "dns": ["192.168.2.10", "8.8.8.8"], "registry-mirrors": ["https://docker.io"]}会提示无法启动,这时候需要修改东西2、/usr/lib/systemd/system/docker.service修改如下:# ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock ExecStart=/usr/bin/dockerd3、重启划重点:一定要执行,否则服务读取之前配置systemctl daemon-reload 然后重启dockersystemctl reset-failed docker.service && systemctl restart docker;docker配置网络docker会有33个网络的限制,所以在设置容器的时候,一定要配置容器的网络1. 创建一个网络,桥接docker network create <网络名称> --subnet 172.40.1.0/242.加入网络和同一个网段下容器的互通在docker-compose.yml里面,增加配置version: '3.9' services: rsshub: environment: CACHE_TYPE: Redis REDIS_URL: 'redis://Redis:6379/' external_links: # 这个参数是用来连接其他容器的,后面就可以直接用,像上面一样,Redis是那个容器的名称 - Redis networks: default: external: true name: web
2023年04月30日
55 阅读
2 评论
0 点赞
2023-04-04
idea接入chatGPT
在文件,设置,插件直接搜索Tabnine AI,然后安装,需要用邮箱注册一下
2023年04月04日
39 阅读
0 评论
0 点赞
2023-02-01
Windows终端
1. 自定义别名需求:因为有时候需要某个python的虚拟环境做我的测试,比如我需要到G:\python\venv\这个虚拟环境下面进行测试实现:echo $profile输出一个文件路径,根据文件路径创建这个文件,之后在创建的文件里面输入函数,例如:function 别名 {需要替代的命令,可以包含空格}function python-test {cd G:\python; .\venv\Scripts\activate; ipython}2. pip全局修改win + r输入%appdata%新建一个pip文件夹新建一个pip.ini文件写入下面的内容[global] index-url = https://mirror.nju.edu.cn/pypi/web/simple/
2023年02月01日
17 阅读
0 评论
0 点赞
2023-01-11
MySQL主从复制
MySQL主从复制配置信息MySQL 8.0centos7.9主:192.168.2.20从:192.168.2.12开始配置1. 配置主服务器首先在/etc/my.cnf进行配置,同步多个就放多个binlog-go-db2. 创建一个同步的用户Create user 'rep'@'192.168.2.%' identified by '123'; grant replication slave on *.* to 'rep'@'192.168.2.%'; flush privileges;3. 查看主服务器的状态我只同步huaeb这个库,记住file和position这两个值从服务器配置搭建MySQL那些就不说了,和上面一样,配置/etc/my.cnf进行配置,同步多个就放多个binlog-go-db1. 配置文件这里server-id不能一样,最好用IP的后缀,以防重复2. 把主服务器的数据库复制过来这里我只同步huaeb这个数据库,所以只把这个库的数据弄过去3. 创建同步信息# 最开始不用关闭 stop slave; # 创建同步信息 CHANGE MASTER TO MASTER_HOST='192.168.2.20', # 主服务器的IP MASTER_USER='rep', # 主服务器创建的同步用户 MASTER_PORT=3306, # 主服务器端口 MASTER_PASSWORD='123', # 用户密码 MASTER_LOG_FILE='mysql-bin.000015', # 主服务器上刚刚记住的file MASTER_LOG_POS=17674; # 主服务器刚刚记住的position # 开始同步 start slave; # 查看同步状态 show slave status\G;两个都为yes则为成功TIP从服务器配置前最好用命令登录一下主服务器的数据库,看能否登录如果从服务器没有这个数据库也会同步失败
2023年01月11日
20 阅读
1 评论
0 点赞
2023-01-07
gitlab自建
进入容器docker exec -it gitlab-gitlab-1 bash进入到容器,然后切换到目录cd /opt/gitlab/embedded/service/gitlab-rails/config编辑文件vi gitlab.ymlhost就是克隆http的时候的地址,例如www.baicu.comssh_host就是ssh的地址,和上面一样,不要端口编辑好之后重启gitlab-ctl restart测试邮箱邮箱配置gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.qq.com" gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_user_name'] = "QQ邮箱@qq.com" gitlab_rails['smtp_password'] = "*****授权码" gitlab_rails['smtp_domain'] = "qq.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = false gitlab_rails['smtp_tls'] = true # 以下的配置是优化性能的,看自己的需求修改 # Terraform gitlab_rails['terraform_state_enabled'] = false # Usage Statistics gitlab_rails['usage_ping_enabled'] = false gitlab_rails['sentry_enabled'] = false grafana['reporting_enabled'] = false # 关闭容器仓库功能 gitlab_rails['gitlab_default_projects_features_container_registry'] = false gitlab_rails['registry_enabled'] = false registry['enable'] = false registry_nginx['enable'] = false # 包仓库 gitlab_rails['packages_enabled'] = false gitlab_rails['dependency_proxy_enabled'] = false # GitLab KAS gitlab_kas['enable'] = false gitlab_rails['gitlab_kas_enabled'] = false # Mattermost mattermost['enable'] = false mattermost_nginx['enable'] = false # Kerberos gitlab_rails['kerberos_enabled'] = false sentinel['enable'] = false # GitLab Pages gitlab_pages['enable'] = false pages_nginx['enable'] = false # 禁用 PUMA 集群模式 puma['worker_processes'] = 0 puma['min_threads'] = 1 puma['max_threads'] = 2 # 降低后台守护进程并发数 sidekiq['concurrency'] = 5 gitlab_ci['gitlab_ci_all_broken_builds'] = false gitlab_ci['gitlab_ci_add_pusher'] = false # 关闭监控 prometheus_monitoring['enable'] = false alertmanager['enable'] = false node_exporter['enable'] = false redis_exporter['enable'] = false postgres_exporter['enable'] = false pgbouncer_exporter['enable'] = false gitlab_exporter['enable'] = false grafana['enable'] = false sidekiq['metrics_enabled'] = false初始密码位置:/etc/gitlab/initial_root_password修改gitlab.rd文件之后,使用一下命令重启gitlab-ctl reconfigure还可以进入到创建的gitlab 容器内docker exec -it gitlab bash去执行gitlab-rails consoleNotify.test_email('收件人邮箱地址', '邮箱主题', '邮箱内容').deliver_now去测试发送邮箱问题汇总权限问题:保存信息:Unable to access log file. Please ensure that /opt/gitlab/embedded/service/gitlab-rails/log/production.log exists and is writable (i.e. make it writable for user and group: chmod 0664 /opt/gitlab/embedded/service/gitlab-rails/log/production.log). The log level has been raised to WARN and the output directed to STDERR until the problem is fixed.尝试使用命令解决,先运行容器,然后使用命令:sudo docker exec gitlab update-permissions sudo docker restart gitlabgitlab-runner搭建version: '3.3' services: gitlab-runner: container_name: gitlab-runner restart: always volumes: - './config:/etc/gitlab-runner' - './ssh:/ssh' - '/temp:/temp' - '/var/run/docker.sock:/var/run/docker.sock' image: gitlab/gitlab-runner注册进入到容器内部docker exec -it gitlab-runner base在gitlab上创建一个作业在容器里面输入这些注册gitlab-runner register --url http://172.16.1.50:84 --token glrt-2AKySoNaWBdeBDjVD2HB取消注册gitlab-runner unregister --url https://gitlab.org/ --token {TOKEN}破解gitlab-ee破解等待gitlab运行起来后,进入docker容器sudo docker exec -it gitlab /bin/bash安装依赖· ruby>=2.7.0 · gitlab-licensesudo apt install ruby sudo gem install gitlab-license创建文件vi license.rb填入以下内容require "openssl" require "gitlab/license" key_pair = OpenSSL::PKey::RSA.generate(2048) File.open("license_key", "w") { |f| f.write(key_pair.to_pem) } public_key = key_pair.public_key File.open("license_key.pub", "w") { |f| f.write(public_key.to_pem) } private_key = OpenSSL::PKey::RSA.new File.read("license_key") Gitlab::License.encryption_key = private_key license = Gitlab::License.new license.licensee = { "Name" => "用户名", "Company" => "公司", "Email" => "邮箱", } license.starts_at = Date.new(2024, 1, 1) # 开始时间 license.expires_at = Date.new(2099, 1, 1) # 结束时间 license.notify_admins_at = Date.new(2098, 12, 1) license.notify_users_at = Date.new(2098, 12, 1) license.block_changes_at = Date.new(2099, 1, 1) license.restrictions = { active_user_count: 100000, } puts "License:" puts license data = license.export puts "Exported license:" puts data File.open("GitLabBV.gitlab-license", "w") { |f| f.write(data) } public_key = OpenSSL::PKey::RSA.new File.read("license_key.pub") Gitlab::License.encryption_key = public_key data = File.read("GitLabBV.gitlab-license") $license = Gitlab::License.import(data) puts "Imported license:" puts $license unless $license raise "The license is invalid." end if $license.restricted?(:active_user_count) active_user_count = 100000 if active_user_count > $license.restrictions[:active_user_count] raise "The active user count exceeds the allowed amount!" end end if $license.notify_admins? puts "The license is due to expire on #{$license.expires_at}." end if $license.notify_users? puts "The license is due to expire on #{$license.expires_at}." end module Gitlab class GitAccess def check(cmd, changes = nil) if $license.block_changes? return build_status_object(false, "License expired") end end end end puts "This instance of GitLab Enterprise Edition is licensed to:" $license.licensee.each do |key, value| puts "#{key}: #{value}" end if $license.expired? puts "The license expired on #{$license.expires_at}" elsif $license.will_expire? puts "The license will expire on #{$license.expires_at}" else puts "The license will never expire." end 生成证书最好在映射出来的目录里面生成这个证书ruby license.rb安装依赖到生成这一步可以在docker容器中进行也可以在宿主机上进行,在宿主机上进行的话需要将生成后的文件copy到容器中去。我这里演示是在容器中进行的。替换默认公钥最好把对应的目录映射出来,要不然以后系统重启之后又需要重新破解 volumes: - **** - ./config/license/license_key.pub:/opt/gitlab/embedded/service/gitlab-rails/.license_encryption_key.pub - ./config/license/selflicense.rb:/opt/gitlab/embedded/service/gitlab-rails/ee/app/models/license.rbcp -f license_key.pub /opt/gitlab/embedded/service/gitlab-rails/.license_encryption_key.pub升级到 ULTIMATE 版本修改文件 /opt/gitlab/embedded/service/gitlab-rails/ee/app/models/license.rb --- /opt/gitlab/embedded/service/gitlab-rails/ee/app/models/license.rb +++ /opt/gitlab/embedded/service/gitlab-rails/ee/app/models/license.rb @@ -367,7 +367,7 @@ end def plan - restricted_attr(:plan).presence || STARTER_PLAN + restricted_attr(:plan).presence || ULTIMATE_PLAN end def edition -表示删除,+表示添加重启配置gitlabgitlab-ctl reconfigure gitlab-ctl restart导入许可证登录 gitlab 后台,管理中心 -> 通用 -> 许可证 (/admin/license),导入 GitLabBV.gitlab-license 可以选择 cat GitLabBV.gitlab-license 打印出文件内容后,把密钥复制后使用密钥文本,而不是上传文件
2023年01月07日
68 阅读
0 评论
0 点赞
2022-08-26
git提交流程
git代码提交流程一.git提交代码简单流程第一步,找到代码仓库地址 拉去项目代码git clone ssh://地址路径,最后用http的地址,而不用ssh路径,http分配的才是自己账号使用的代码分支第二步:如果首次拉去,会输入git账号,首次登录之后,后面就不需要做任何操作了第三步:git add . 把代码提交到缓存区第四步:git commit -m "备注" 提交代码第五步:把代码合并到远程分支中去 git push (origin test)如果没有填,就是推送到默认分支,一般在退文件的时候,最后先拉去一下代码 git pull 把分支合并到主支假如我们现在在test分支上,刚开发完项目,执行了下列命令git add .git commit -m ‘test'git push -u origin test然后我们要把dev分支的代码合并到master分支上 该如何?二.首先切换到master分支上1.git checkout master2.git pull origin master如果是多人开发的话 需要把远程master上的代码pull下来3.git merge test如果是自己一个开发就没有必要了,为了保险期间还是pull然后我们把test分支的代码合并到master上4.git status然后查看状态两个位置冲突了git checkout routes/listing.php 处理冲突文件listing处理冲突文件需要合并文件,把在提交代码的时候处理上面的意思就是你有12个commit,需要push到远程master上 执行下面命令即可5.git push origin master这样就可以了需求单独创建分支在创建之前先 git pull 拉去最新项目代码git checkout -b dev 每次创建独立分支2)创建并切换到新的分支中:命令:git checkout –b 分支名称从图中可以看出,执行命令前,我们处于master分支中,执行命令后,我们直接在dev1分支中了。3)删除本地分支和原地分支: 我现在在dev20181018分支上,想删除dev20181018分支 1 先切换到别的分支: git checkout dev20180927 2 删除本地分支: git branch -d dev20181018 3 如果删除不了可以强制删除,git branch -D dev20181018 4 有必要的情况下,删除远程分支(慎用):git push origin --delete dev20181018 5 在从公用的仓库fetch代码:git fetch origin dev20181018:dev20181018 6 然后切换分支即可:git checkout dev20181018 注:上述操作是删除个人本地和个人远程分支,如果只删除个人本地,请忽略第4步6.代码回滚git log # 得到你需要回退一次提交的commit idgit reset --hard <commit_id> # 回到其中你想要的某个版或者git reset --hard HEAD^ # 回到最新的一次提交创建一个ssh密钥ssh-keygen -t rsa -C "Git邮箱地址"使用方式,git忽略文件1. 本地有,服务器没有可以用.gitignore文件2. 如果文件已经在服务器上这时候,就需要使用git update-index --skip-worktree命令了。该命令的作用是,让git在搜索文件列表时,忽略某个文件,这样该文件即使有修改,git也不会关心。git update-index --skip-worktree go.mod使用这个命令,时间久了,可能会忘记自己忽略过哪些文件,这时候可以使用git ls-files -v . | grep "^S"命令找出来忽略过的文件。#例子: git ls-files -v . | grep "^S" #输出:S go.mod不想继续忽略该文件时,使用git update-index --no-skip-worktree命令,来让git不再忽略该文件。git update-index --no-skip-worktree go.mod注:grep命令win上没有,需要下载一个文件http://gnuwin32.sourceforge.net/packages/grep.htm下载下来是一个grep-2.5.4-setup.exe进行安装,记住你的安装路径(比如我是:C:\Program Files (x86)\GnuWin32\bin ),之后加入到path环境变量git多用户配置.ssh目录下配置configHost github HostName github.com User zzz IdentityFile ~/.ssh/id_rsa_github PreferredAuthentications publickey Host gitee HostName gitlab.mygitlab.com User zzz2 IdentityFile ~/.ssh/id_rsa_giteeHost: 仓库的别名,可以随意取名HostName: 仓库网站的域名User: Git的账号用户名IdentityFile: 私钥的绝对路径 (自己的ssh key的文件)PreferredAuthentications 配置登录时用什么权限认证
2022年08月26日
24 阅读
0 评论
0 点赞
2022-08-25
windows命令
[toc]{tabs}{tabs-pane label="查看端口情况"}1. Windows查看所有的端口点击电脑左下角的开始,然后选择运行选项,打开“运行”窗口(使用“win+r”键来打开),输入【cmd】命令,进行命令提示符。然后我们在窗口中输入【netstat -ano】按下回车,即会显示所有的端口占用情况。2. 查询指定的端口占用在窗口中,继续输入【netstat -ano|findstr "提示的端口"】,例如小编提示的端口为2080,那么小编就输入命令为【netstat -ano|findstr "2080"】,回车之后就可以看见列表中的PID,然后根据PID在电脑的任务管理器中查看对应的占用程序,接着进行关闭即可。3. 查询PID对应的进行进程如果在上面步骤之后,我们得到的PID为2016,那么我们就可以输入命令【tasklist|findstr "2016"】,在第一行显示的名字就是程序名,这样我们就明白是那个程序占用的端口。4. 然后我们输入命令【taskkill /f /t /im 程序名】即可。{/tabs-pane}{tabs-pane label="刷新dns缓存"}ipconfig /flushdns{/tabs-pane}{/tabs}
2022年08月25日
16 阅读
0 评论
0 点赞
2022-08-24
Django orm 使用case when排序
from django.db.models import Case, When # 先取出商品id和销量 ratings_tuples = [(r.id, r.sales) for r in Product.objects.filter()] # 根据销量降序排序 ratings_list = sorted(ratings_typles, key=lambda x: x[1], reverse=True) print ratings_list [(20L, 1000L), (2187L, 503L), (7715L, 483L), (7711L, 430L), (7720L, 421L), (7717L, 353L), (7719L, 352L), (7712L, 344L), (883L, 300L), (7718L, 276L), (7716L, 219L), (1935L, 110L), (592L, 100L), (3293L, 65L), (2439L, 56L), (7671L, 50L), (1597L, 30L), (7705L, 30L), (777L, 20L), (2292L, 20L), (1563L, 19L), (7706L, 18L), (2L, 16L), (7012L, 16L), (1255L, 12L), (15L, 11L), (1183L, 11L), (3101L, 11L), (7710L, 11L), (59L, 10L), (1256L, 10L), (4029L, 10L), (5831L, 10L), (7241L, 10L), (1L, 9L), (50L, 9L), (1933L, 9L), (2613L, 8L), (18L, 7L), (524L, 6L), (1934L, 6L), (221L, 5L), (1601L, 5L), (1702L, 5L), (1855L, 5L), (5195L, 5L), (7073L, 5L), (7709L, 5L), (7L, 4L), (695L, 4L), (1018L, 4L), (2303L, 4L), (2674L, 4L), (3671L, 4L), (4435L, 4L), (7669L, 4L), (264L, 3L), (589L, 3L), (2526L, 3L), (5115L, 3L), (5305L, 3L), (7616L, 3L), (7695L, 3L), (17L, 2L), (77L, 2L), (770L, 2L), (1474L, 2L), (1591L, 2L), (1961L, 2L), (2763L, 2L), (3670L, 2L), (4434L, 2L), (7479L, 2L), (3L, 1L), (5L, 1L), (16L, 1L), (19... # 将排序后的id放在一个列表里面 pk_list = [idx for idx, sales in ratings_list] # 根据这个id进行case when的排序 preserved = Case(*[When(pk=pk, then=pos) for pos, pk in enumerate(pk_list)]) query = Product.objects.filter(pk__in=pk_list).order_by(preserved)
2022年08月24日
36 阅读
0 评论
1 点赞
2022-08-08
markdown操作
1. Markdown扩展语法之任务清单任务列表使您可以创建带有复选框的项目列表。在支持任务列表的Markdown应用程序中,复选框将显示在内容旁边。要创建任务列表,请在任务列表项之前添加破折号(-)和方括号,并[ ]在其前面加上一个空格()。要选择一个复选框,请x在方括号([x])之间添加in 。- [x] Write the press release - [ ] Update the website - [ ] Contact the media
2022年08月08日
72 阅读
0 评论
0 点赞
2022-07-26
apscheduler cron定时任务触发接口
from apscheduler.schedulers.blocking import BlockingScheduler class Timing: def __init__(self, start_date, end_date, hour=None): self.start_date = start_date self.end_date = end_date self.hour = hour def cron(self, job, *value_list): """cron格式 在特定时间周期性地触发""" # year (int 或 str) – 年,4位数字 # month (int 或 str) – 月 (范围1-12) # day (int 或 str) – 日 (范围1-31) # week (int 或 str) – 周 (范围1-53) # day_of_week (int 或 str) – 周内第几天或者星期几 (范围0-6 或者 mon,tue,wed,thu,fri,sat,sun) # hour (int 或 str) – 时 (范围0-23) # minute (int 或 str) – 分 (范围0-59) # second (int 或 str) – 秒 (范围0-59) # start_date (datetime 或 str) – 最早开始日期(包含) # end_date (datetime 或 str) – 分 最晚结束时间(包含) # timezone (datetime.tzinfo 或str) – 指定时区 scheduler = BlockingScheduler() scheduler.add_job(job, 'cron', start_date=self.start_date, end_date=self.end_date, hour=self.hour, args=[*value_list]) scheduler.start() def interval(self, job, *value_list): """interval格式 周期触发任务""" # weeks (int) - 间隔几周 # days (int) - 间隔几天 # hours (int) - 间隔几小时 # minutes (int) - 间隔几分钟 # seconds (int) - 间隔多少秒 # start_date (datetime 或 str) - 开始日期 # end_date (datetime 或 str) - 结束日期 # timezone (datetime.tzinfo 或str) - 时区 scheduler = BlockingScheduler() # 在 2019-08-29 22:15:00至2019-08-29 22:17:00期间,每隔1分30秒 运行一次 job 方法 scheduler.add_job(job, 'interval', minutes=1, seconds=30, start_date=self.start_date, end_date=self.end_date, args=[*value_list]) scheduler.start() @staticmethod def date(job, *value_list): """date格式 特定时间点触发""" # run_date (datetime 或 str) - 作业的运行日期或时间 # timezone (datetime.tzinfo 或 str) - 指定时区 scheduler = BlockingScheduler() # 在 2019-8-30 01:00:01 运行一次 job 方法 scheduler.add_job(job, 'date', run_date='2019-8-30 01:00:00', args=[*value_list]) scheduler.start()
2022年07月26日
37 阅读
0 评论
0 点赞
2022-07-25
Django中的ORM操作之高级查询aggregate和annotate方法
[Django]中的ORM操作之高级查询aggregate和annotate方法aggregate()方法详解annotate()方法详解aggregate和annotate应用场景Django中使用原生SQLaggregate()方法详解aggregate的中文意思是聚合,源于SQL的聚合函数,Django的aggregate()方法作用是对一组值 (比如queryset的某个字段)进行统计计算,并以字典(Dict)格式返回统计计算结果。django的aggregate方法支持的聚合操作有AVG / COUNT / MAX / MIN /SUM等。annotate()方法详解annotate的中文意思是注释,一个更好的理解是分组(Group By)。如果你想要对数据集先进行分组然后再进行某些聚合操作或排序时,需要使用annotate方法来实现。与aggregate方法不同的是, annotate方法返回结果的不仅仅是含有统计结果的一个字典,而是包含有新增统计字段的查询集(queryset) 。values或者values_list 放在annotate前面: 表示values或values_list是声明以什么字段分组,annotate执行分组。values或者values_list放在annotate后面: annotate表示直接以当前表的pk执行分组, values或者values_list表示查询那些字段, 并且要将annotate里的聚合函数起别名, 在values或者values_list里面写其别名。res = Publish.objects.values("name").annotate(in_price = Min("book__price")) # 先以出版社的名字进行分组, 然后再使用聚合函数查询到每个出版社里面最便宜的书籍aggregate和annotate应用场景Django的aggregate和annotate方法属于高级查询方法,主要用于组合查询,可以大大提升数据库查询效率。当你需要对查询集(queryset)的某些字段进行聚合操作时(比如Sum, Avg, Max),请使用aggregate方法。如果你想要对数据集先进行分组(Group By)然后再进行某些聚合操作或排序时,请使用annotate方法。Django中使用原生SQL我一开始想图简化,就不想用sql,于是转战django中的orm,结果今天卡住了,想半天想不出来怎么转,又回到了sql,所以说啊,不要偷懒,不然会很痛苦的,血的教训!那么问题来啦,Django中怎么使用原生Sql呢?首先我现在的需求是,查询每一个类别的文章的总数目、总访问量、总评论量以及每一个作者的文章的总数目、总访问量、总评论量,对应的sql语句如下:select category_id,count(id),sum(total_views),sum(comments) from tb_article group by category_id; select author_id,count(id),sum(total_views),sum(comments) from tb_article group by author_id;在Django中执行原生sql的操作如下:# 查询各个类别、各个作者的文章的总数量、总访问量、总评论量 try: # 创建连接 conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='wxm20010428', db='blog', charset='utf8') # 创建游标 cursor = conn.cursor() # 原生sql语句 注意多条sql语句执行时的写法 sql1 = 'select category_id,count(id),sum(total_views),sum(comments) from tb_article group by category_id;' sql2 = 'select author_id,count(id),sum(total_views),sum(comments) from tb_article group by author_id;' # 执行SQL cursor.execute(sql1) result1 = cursor.fetchall() for r1 in result1: print(r1) # 完成sql1的查询 cursor.execute(sql2) result2 = cursor.fetchall() for r2 in result2: print(r2) # 完成sql2的查询 cursor.close() conn.close() except Exception as e: print("Error%d: %s" % (e.args[0], e.args[1]))
2022年07月25日
22 阅读
0 评论
0 点赞
2022-07-18
python async 使用,介绍
程序在执行 IO 密集型任务的时候,程序会因为等待 IO 而阻塞,而协程作为一种用户态的轻量级线程,可以帮我们解决这个问题说人话:说白了就是,当协程遇到io操作而阻塞时,立即切换到别的任务,如果操作完成则进行回调返回执行结果,提高了效率,同时这样也可以充分利用 CPU 和其他资源,这就是异步协程的优势,并且协程本质上是个单进程,相对于多进程来说,无需进程间上下文切换的开销,无需原子操作锁定及同步的开销,编程模型也非常简单。async/await 是python3的新特性,可以进行协程运行。个人将他理解成多线程。实现代码如下import time import asyncio async def SleepTime(ts): if ts == 3: await asyncio.sleep(10) #当ts等于3的时候,让挂起的时间为10s,其他的按正常挂起,验证协程时间。 else: await asyncio.sleep(ts) async def main(loop): tasks = [] for i in range(6): print("time begin %s"%i) tasks.append(loop.create_task(SleepTime(i))) #相当于开启了一个线程 print("sleep time end %s"%i) print("*********************") await asyncio.wait(tasks) #等待所有的任务完成。 if __name__ == "__main__": # main() print("begin test") tb = time.time() print(tb) #记录当前时间 loop = asyncio.get_event_loop() loop.run_until_complete(main(loop)) loop.close() print(time.time()-tb) #记录结束时间 print("end")` 运行结果如下,没有用到协程的结果,会依次执行,总耗时会大于10秒。begin test 1602423299.3981705 time begin 0 sleep time end 0 ********************* time begin 1 sleep time end 1 ********************* time begin 2 sleep time end 2 ********************* time begin 3 sleep time end 3 ********************* time begin 4 sleep time end 4 ********************* time begin 5 sleep time end 5 ********************* 10.005681276321411 end [Finished in 10.2s]
2022年07月18日
36 阅读
0 评论
0 点赞
2022-07-08
git 放弃本地修改,强制拉取更新
git 放弃本地修改,强制拉取更新git 放弃本地修改,强制拉取更新开发时,对于本地的项目中修改不做保存操作(或代码改崩),可以用到Gitpull的强制覆盖,具体代码如下:gitfetch–allgitreset–hardorigin/mastergitpull//可以省略gitfetch指令是下载远程仓库最新内容,不做合并gitreset指令把HEAD指向master最新版本大家好,又见面了,我是你们的朋友全栈君。开发项目时,对于本地已修改但又不想保留的代码(比如你代码改崩了),可以用如下两种方法来重置代码:1、restore 重置如果你修改了代码,但是并未执行 git add 操作,可直接执行:git restore . . 表示所有文件,如果想重置个别文件,指定文件路径即可git restore <文件>... 注意:如果你已经执行了 git add 操作,此时代码已保存至暂存区,需要先取消暂存区变更:git restore --staged . 或者git reset . 然后,再执行 git pull 拉取远程代码同步即可。2、reset 回退reset 比较暴力,相当于 可适用于 代码在工作区、暂存区、仓库区等任何场景,重置后不可恢复,对于新手有一定的安全隐患。git fetch --all git reset --hard origin/master git pull // 这一步为了同步远程代码,不需要的话可不执行 git fetch 指令是下载远程仓库最新内容,不做合并。git reset 指令把HEAD指向master最新版本。reset –hard:重置后不保留暂存区和工作区reset –soft:保留工作区,并把重置 HEAD 所带来的新的差异放进暂存区(此时代码的变更状态相当于执行完 git add命令)reset –mixed:reset的默认参数,保留工作目录,并重置暂存区(此时代码的变更状态相当于执行 git add命令之前)3、stash 暂存(推荐)我比较喜欢的方法,是用stash,暂存代码再同步。首先,将所有代码添加至暂存区:git add . 然后,将代码临时保存:git stash 此时代码会重置到修改前的状态,可以同步远程仓库区,完事儿。git pull 同步后,如果还想继续修改原来的代码,可将临时代码恢复至工作区:git stash pop 注意,stash 用法有很多,比如save,push,pop,clear等,需要使用可以查阅stash 命令
2022年07月08日
16 阅读
0 评论
0 点赞
1
...
3
4
5