首页
关于
友链
Search
1
ESXI 一些功能调整
560 阅读
2
天翼云网关3.0/4.0超管密码
514 阅读
3
SoftEther 客户端篇
483 阅读
4
SoftEther 服务端篇
388 阅读
5
Centos安装个人网盘Alist v3教程
347 阅读
默认分类
代码相关
vue
html
python
系统
数据库
docker
安卓
软件分享
杂七杂八的工具
游戏分享
游戏相关
我的家庭影院
Ai
登录
Search
标签搜索
python
esxi
git
SoftEther
linux
apscheduler
在线
rclone
飞牛
list
列表
idm
激活码
Charles
pdf
免安装
鲁大师
图片查看器
蜂蜜浏览器
honeyview
哥特式
累计撰写
106
篇文章
累计收到
15
条评论
首页
栏目
默认分类
代码相关
vue
html
python
系统
数据库
docker
安卓
软件分享
杂七杂八的工具
游戏分享
游戏相关
我的家庭影院
Ai
页面
关于
友链
搜索到
106
篇与
的结果
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日
51 阅读
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日
25 阅读
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日
265 阅读
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日
36 阅读
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日
119 阅读
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日
112 阅读
0 评论
1 点赞
2022-08-19
使用tinyMediaManager遇到的各种问题和解决办法
1. 连不上api.themoviedb.org修改host文件至于需要修改成什么地址,在这里搜索:搜http://api.themoviedb.org,找到China那一项,自己用ping测试一下就知道哪个最快了顺便说一下,win10的hosts文件在C:\WINDOWS\system32\drivers\etc电视剧也建议从themoviedb刮,thetvdb我试了几次木有成功,反正不好用。2. 动漫顺序不对的问题每个电视剧文件夹下面再建季文件夹第一季用Season 1 第二季用Season 2以此类推,特典比如何说ova啥的用Specials。季文件夹下每一集改名S01E01 S01E02以此类推,S01代表第一季,E01代表第一集。最后再用tmm刮一遍然后丢经jellyfin文件夹。特别篇用S00E01的方式命名
2022年08月19日
220 阅读
0 评论
0 点赞
2022-08-08
markdown操作
1. Markdown扩展语法之任务清单任务列表使您可以创建带有复选框的项目列表。在支持任务列表的Markdown应用程序中,复选框将显示在内容旁边。要创建任务列表,请在任务列表项之前添加破折号(-)和方括号,并[ ]在其前面加上一个空格()。要选择一个复选框,请x在方括号([x])之间添加in 。- [x] Write the press release - [ ] Update the website - [ ] Contact the media
2022年08月08日
226 阅读
0 评论
0 点赞
2022-08-05
epic游戏内不能更改中文的解决办法
点epic右上角的头像设置下拉找到游戏名称勾选额外命令行参数输入-epiclocale=zh-Hans--简体中文
2022年08月05日
26 阅读
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日
117 阅读
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日
107 阅读
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日
244 阅读
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日
49 阅读
0 评论
0 点赞
2022-06-21
Linux下使用rclone挂载网盘到本地
Linux下使用rclone挂载网盘到本地Rclone是一个支持挂载多数国外网盘的工具。Rclone官网传送们目前Rclone支持挂载的网盘有:Google Drive、 Dropbox 、Google Cloud Storage 、Microsoft One Drive 、Hubic、 Backblaze B2 、Yandex Disk 、Openstack Swift / Rackspace cloud files / Memset Memstore 等。更强大的是,Rclone还支持SFTP 、FTP 、HTTP挂载。配置步骤(以Ubuntu为例)第一步:安装rclone 1. 方法一:rclone一键安装脚本 2. curl https: 4. 方法二: 5. wget https: 第二步:授权(以onedrive为例)rclone authorize "onedrive"会出现以下信息: 1. 2018/01/23 20:28:56 NOTICE: Config file "C:\\Users\\Administrator\\.config\\rclo 2. ne\\rclone.conf" not found - using defaults 3. Choose OneDrive account type? 4. * Say b for a OneDrive business account 5. * Say p for a personal OneDrive account 6. b) Business 7. p) Personal 8. b/p> p 9. If your browser doesn't open automatically go to the following link: http://127. 10. 0.0.1:53682/auth #接下来会弹出浏览器,要求你登录账号进行授权 11. Log in and authorize rclone for access 12. Waiting for code... 13. Got code 14. Paste the following into your remote machine ---> 15. {"access_token":"xxxx"} #请复制{xx}整个内容,后面需要用到 16. <---End paste 第三步:配置(链接网盘,以onedrive为例)rclone config会出现以下信息: 1. n) New remote 2. s) Set configuration password 3. q) Quit config 4. n/s/q> n 5. name> Rats #随便填,后面要用到 6. Type of storage to configure. 7. Choose a number from below, or type in your own value 8. 1 / Amazon Drive 9. \ "amazon cloud drive" 10. 2 / Amazon S3 (also Dreamhost, Ceph, Minio) 11. \ "s3" 12. 3 / Backblaze B2 13. \ "b2" 14. 4 / Box 15. \ "box" 16. 5 / Cache a remote 17. \ "cache" 18. 6 / Dropbox 19. \ "dropbox" 20. 7 / Encrypt/Decrypt a remote 21. \ "crypt" 22. 8 / FTP Connection 23. \ "ftp" 24. 9 / Google Cloud Storage (this is not Google Drive) 25. \ "google cloud storage" 26. 10 / Google Drive 27. \ "drive" 28. 11 / Hubic 29. \ "hubic" 30. 12 / Local Disk 31. \ "local" 32. 13 / Microsoft Azure Blob Storage 33. \ "azureblob" 34. 14 / Microsoft OneDrive 35. \ "onedrive" 36. 15 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH) 37. \ "swift" 38. 16 / Pcloud 39. \ "pcloud" 40. 17 / QingCloud Object Storage 41. \ "qingstor" 42. 18 / SSH/SFTP Connection 43. \ "sftp" 44. 19 / Webdav 45. \ "webdav" 46. 20 / Yandex Disk 47. \ "yandex" 48. 21 / http Connection 49. \ "http" 50. Storage> 14 #选择14,Microsoft OneDrive 51. Microsoft App Client Id - leave blank normally. 52. client_id> #留空 53. Microsoft App Client Secret - leave blank normally. 54. client_secret> #留空 55. Remote config 56. Choose OneDrive account type? 57. * Say b for a OneDrive business account 58. * Say p for a personal OneDrive account 59. b) Business 60. p) Personal 61. b/p> p #这里选择个人版,你想挂载Business就选择b 62. Use auto config? 63. * Say Y if not sure 64. * Say N if you are working on a remote or headless machine 65. y) Yes 66. n) No 67. y/n> n #选择n 68. For this to work, you will need rclone available on a machine that has a web browser available. 69. Execute the following on your machine: 70. rclone authorize "onedrive" 71. Then paste the result below: 72. result> {"access_token":""} #输入之前在客户端授权的内容 74. [Rats] 75. client_id = 76. client_secret = 77. token = {"access_token":""} 79. y) Yes this is OK 80. e) Edit this remote 81. d) Delete this remote 82. y/e/d> y # 选择y 83. Current remotes: 85. Name Type 86. ==== ==== 87. Rats onedrive 89. e) Edit existing remote 90. n) New remote 91. d) Delete remote 92. r) Rename remote 93. c) Copy remote 94. s) Set configuration password 95. q) Quit config 96. e/n/d/r/c/s/q> q #选择q退出 第四步:网盘挂载挂载为目录 1. 举例: 2. 目标:将rclone中的OneDrive挂载到本地/home/songtianlun/onedrive目录下,并清空本地目录内容(--allow-non-empty) 4. rclone mount OneDrive: /home/songtianlun/onedrive --allow-non-empty 6. 注:网盘目录和本地目录名称不可一致,否则报错 利用Screen让Rclone在后台运行screen -S onedrive之后再运行挂载命令。挂载完成后再用快捷键CTRL-a d 来暂时断开当前会话。最后用screen -r <screen_pid>重新连接上。若没有安装Screen,可以使用如下命令安装: 1. yum install screen #centos系统 2. apt-get install screen #debian/ubuntu系统 第五步:卸载磁盘 1. fusermount -qzu LocalFolder 常用命令 1. rclone config – 以控制会话的形式添加rclone的配置,配置保存在.rclone.conf文件中。 2. rclone copy – 将文件从源复制到目的地址,跳过已复制完成的。 3. rclone mount-挂载 4. rclone sync – 将源数据同步到目的地址,只更新目的地址的数据。 5. rclone move – 将源数据移动到目的地址。 6. rclone delete – 删除指定路径下的文件内容。 7. rclone purge – 清空指定路径下所有文件数据。 8. rclone mkdir – 创建一个新目录。 9. rclone rmdir – 删除空目录。 10. rclone check – 检查源和目的地址数据是否匹配。 11. rclone ls – 列出指定路径下所有的文件以及文件大小和路径。 12. rclone lsd – 列出指定路径下所有的目录/容器/桶。 13. rclone lsl – 列出指定路径下所有文件以及修改时间、文件大小和路径。 14. rclone md5sum – 为指定路径下的所有文件产生一个md5sum文件。 15. rclone sha1sum – 为指定路径下的所有文件产生一个sha1sum文件。 16. rclone size – 获取指定路径下,文件内容的总大小。 17. rclone version – 查看当前版本。 18. rclone cleanup – 清空remote。 19. rclone dedupe – 交互式查找重复文件,进行删除/重命名操作。
2022年06月21日
35 阅读
0 评论
0 点赞
2022-06-08
Linux命令
{tabs}{tabs-pane label="查询端口是否占用"}lsof -i:5706{/tabs-pane}{tabs-pane label="查看日志"}这会显示日志文件的末尾内容,默认显示最后10行。可以通过指定-n参数来显示指定行数的日志,例如:tail -n 20 logfile.txt这会显示最后20行日志。可以通过指定-f参数来跟踪文件变化,实时显示新增的日志,例如:tail -f logfile.txt这在需要实时监控日志变化时非常有用。{/tabs-pane}{/tabs}
2022年06月08日
55 阅读
0 评论
0 点赞
1
...
5
6
7
8