本博客刚刚搭建,基于Hexo+github,本人资料全放在有道云笔记,所以等我慢慢整理再发表。(不整理的话除了我没人能看懂,哈哈)。
查找方法:
- 首先点击
所有文章
- 再点击
tag
- 可以直接在搜索栏搜索或者点击标签
啦啦啦,搭这个博客快累死了~
安装virtualenv:pip3 install virtualenv
virtualenv venv
source venv/bin/activate
deactivate
安装virtualenvwrapper:
安装pip:sudo apt-get install python-pip
安装virtualenvwrapper:pip install virtualenvwrapper
配置:
~/.virtualenvs
~/.bashrc
末尾添加如下内容:1 | export WORKON_HOME=$HOME/.virtualenvs |
重新加载:source ~/.bashrc
查看虚拟环境
创建虚拟环境
mkvirtualenv 虚拟环境名
mkvirtualenv3 虚拟环境名
使用虚拟环境:
workon 虚拟环境名
退出虚拟环境
deactivate
删除虚拟环境
rmvirtualenv 虚拟环境名
安装flask
mkvirtualenv3 flask
pip install flask
1 | from flask import Flask |
启动:python manage.py runserver
测试:浏览器输入127.0.0.1:5000
启动参数
| 参数 | 说明 |
| ——– | —————————— |
| debug | 是否开启调试模式,默认为False,开启后代码修改会自动加载 |
| threaded | 是否开启多线程 |
| port | 指定端口 |
| | 指定主机,设置为’0.0.0.0’可以通过IP进行访问 |
app.run(debug=True, threaded=True, port=5050, host=’0.0.0.0’)
变量或对象
| 名称 | 上下文 | 说明 |
| ———– | —– | ———————- |
| current_app | 程序上下文 | 当前运行的应用实例 |
| g | 程序上下文 | 全局对象,处理请求的临时数据 |
| request | 请求上下文 | 请求对象,包含了客户端所有的HTTP请求信息 |
| session | 请求上下文 | 用户会话,用于保存需要’记住’的信息 |
请求钩子函数
| 函数 | 说明 |
| ——————– | ————– |
| before_first_request | 第一次请求之前 |
| before_request | 每次请求之前 |
| after_request | 每次请求之后,前提是没有异常 |
| teardown_request | 每次请求之后,无论是否有异常 |
所谓的钩子函数,就是框架给用户预留的后门
无参路由
1 | @app.route('/test/') |
带参路由
1 | # 带参路由,参数写在尖括号中 |
说明
1 | # manage.py |
ls /bin | grep '^m'
find -name 2.txt | xargs rm -rf
标准输入(stdin)、标准输出(stdout)、标准错误(stderr)
在linux中,创建任意进程,系统会自动创建上面三个数据流,其实就是三个文件
三个文件的描述符分别是:0、1、2,都指向了终端
重定向就是改变原来默认的表现位置。
演示:
1 | 输出重定向: |
什么是shell?
把在终端下可执行的命令保存到文件中,这个文件就是shell程序。
shell的类型?
ash、bash、ksh、csh等,
查看默认shell使用echo $SHELL
/etc/shells文件中存放了当前系统中可用的shell
shell脚本的执行
bash hello.sh
,该文件可以没有可执行权限chmod +x hello.sh
#!/bin/bash
,其他位置#表示注释./hello.sh
/home/jerry/shell/hello.sh
name="xiaoming"
echo $name 或 echo ${name}
unset name
readonly name="xiaoming"
'='
时,两边不能有空格shell
的变量env
echo $PATH
export PATH=$PATH:/home/jerry/shell
/etc/profile
~/.profile、~/.bashrc、~/.bash_profile
source filename
或 . filename
$0
:表示脚本名$1 ~ $9
:表示传递给脚本的参数$#
:传递给脚本参数的个数$*
:传递给脚本的所有参数$?
:上次命令执行情况,0表示正确,其他表示错误1 | $、`、\、" |
1 | &、*、?、|、^、$、` |
1 | ${#name} |
1 | ${name:2:3} |
从下表为2的字符开始提取,提取3个字符
a=(1 2 3)
1 | ${a[0]} |
长度:
1 | ${#a[@]} |
所有元素:
1 | ${a[*]} |
使用for-in遍历时需要提取元素
seq 1 10
,生成1-10的连续整数###expr
说明:运算一个表达式
示例:
1 | expr 1 + 2 # 结果为3 |
test命令,成功为真,失败为假;测试结果通过$?检查,0代表真,1代表假。
1 | #!/bin/bash |
数值比较
-lt
:小于-le
:小于等于-gt
:大于-ge
:大于等于-eq
:相等-ne
:不相等字符串测试
=
:相等!=
:不相等-z
:字符串长度是否为0-n
:字符串长度是否不为0文件判断
-f
:普通文件-d
:目录文件-c
:字符设备文件-b
:块设备文件-w
:文件存在,且可写-x
:文件存在,且可执行-s
:文件存在,且至少有一个字符逻辑运算
-a
:逻辑与(and)
,也可以使用 &&
进行转换-o
:逻辑或(or)
,可以使用||进行转换!
:逻辑非1 | if [ 1 -lt 3 -a 2 -lt 3 ]; then |
if-else
1 | if [ 1 -lt 3 -a 2 -lt 3 ]; then |
case
1 | # 从终端获取内容,-p后的字符串为提示字符 |
for-in及for
1 | for x in a b c |
while
1 | i=1 |
until
1 | i=1 |
break、continue:自行学习
1 | demo() |
管理操作:
service
服务 操作service ssh start|stop|restart
配置服务
在/etc/init.d/
目录下创建一个脚本文件(test),添加内容如下:
1 | #!/bin/bash |
给脚本文件添加可执行权限:sudo chmod +x test
服务测试:service test
若这样测试:service test start
则会出现服务找不到错误
sudo update-rc.d test defaults
能够解决服务不存在的问题/etc/init.d/test
脚本在不同的运行模式启动脚本目录创建软链接再次测试不出现打印结果,那是因为所有使用service其他的服务都是后台运行
sudo systemctl status test
即可查看服务状态当服务脚本更新是需要使用sudo systemctl daemon-reload
进行重新加载
移除服务:sudo update-rc.d -f test remove
说明:每个启动模式下的脚本,K开头表示停止,S开头表示启动,后面数字代表执行顺序
zip/unzip,文件后缀为zip
1 | 压缩:zip 123.zip *.txt |
gzip/gunzip,文件后缀为gz
1 | 压缩:gzip 1.txt 会生成1.txt.gz压缩文件 |
bzip2/bunzip2,文件后缀为bz2
1 | 压缩:bzip2 1.txt 会生成1.txt.bz2压缩文件 |
tar:打包解包工具,后缀为tar。
1 | 选项: |
netstat
netstat -tunpl
free
free -h
,-h人性化查看大小w
top
说明:w的详细信息,3S会刷新一次,q退出查看
结果:
1 | 第一行:与w相同 |
sudo apt-get install ufw
sudo ufw status
sudo ufw enable|disable
sudo ufw default allow|deny
sudo ufw allow|deny port/服务
,如:sudo ufw allow 5900
sudo ufw delete allow 5900
说明:默认ubuntu是没有自带的ssh服务,需要手动安装
安装:sudo apt-get install openssh-server
控制:sudo service ssh start|stop|restart
连接:putty | xshell 工具,类unix也可以是终端:ssh user@host
设置root用户远程连接:修改/etc/ssh/sshd_config文件
1 | # PermitRootLogin prohibit-password |
修改完配置文件,需要重启服务:sudo service ssh restart
apt-get安装:无需考虑复杂的软件依赖关系
dpkg安装:文件后缀为.deb,可能需要进行依赖包的安装
-i:安装
-r:卸载
-l:查看软件包信息
-L:查看软件安装目录
示例:安装wps
1 | 1.安装wps |
源码安装:需要对源文件进行编译
tar -zxvf nginx-1.13.7.tar.gz
cd nginx-1.13.7
./configure --prefix=/usr/local/nginx
sudo apt-get install gcc libpcre3-dev zlib1g-dev
make && make install
命令格式:
1 | 命令 [选项] [参数] |
[] 表示可选的
示例:
1 | ls -a /etc |
ls:查看指定目录的内容,不指定目录时查看当前工作目录
| 选项 | 说明 |
| —- | —————- |
| -a | 显示所有文件,包括隐藏文件 |
| -l | 列表显示,详细信息 |
| -h | 人性化的显示大小,如:K/M/G |
-l选项显示的结果:类型及权限 | 引用数 | 用户 | 用户组 | 大小 | 月 | 日| 年/时间 | 名称
文件类型:(-l显示结果中的第一部分的第一列)
| 符号 | 类型 |
| —- | —— |
| - | 普通文件 |
| d | 目录文件 |
| l | 链接文件 |
| c | 字符设备文件 |
| b | 块设备文件 |
| s | 套接字文件 |
| p | 管道文件 |
cd:切换工作目录
| 符号 | 说明 |
| —- | ———– |
| . | 当前目录 |
| .. | 上一级目录 |
| ~ | 当前用户的家目录 |
| - | 表示上次切换之前的目录 |
| / | 表示根目录 |
- 使用cd时,不指定目标地址,会切换到家目录
- 凡是以/开头的目录都是绝对目录
- 凡是以.或..开头的目录都是相当目录
pwd:查看当前工作目录
alias:给命令起别名
相关命令
| 命令 | 说明 |
| —- | —————————————- |
| cat | 从上到下,显示文件全部内容 |
| tac | 从下到上,显示文件全部内容 |
| head | 查看开头指定行数的内容,不指定时默认10行,如:head -20 filename |
| tail | 查看文件末尾指定行数的内容,不指定时默认10行,如:tail -5 filename |
| nl | 功能与cat相同,但是多显示了行号 |
| wc | 统计显示,内容:行数 单词数 字符数 文件名 |
| more | 一点一点查看内容 |
| less | 一点一点查看内容 |
more/less使用说明
相关命令
| 命令 | 说明 |
| —– | ———————– |
| touch | 新建文件,可以是多个 |
| rm | 删除文件或目录(删除目录时要传递’-r’选项) |
| cp | 拷贝文件或目录(拷贝目录是要传递’-r’选项) |
| mv | 移动文件或目录 |
| mkdir | 创建目录,可以是多个 |
| rmdir | 删除空目录 |
选项说明
相关命令
| 命令 | 说明 |
| ——– | —————————————- |
| whoami | 查看当前登录的用户名 |
| useradd | 新建用户,-d指定家目录,-m不存在,-s指定shell |
| userdel | 删除用户,-r会删除用户家目录 |
| passwd | 设置指定用户的密码,没有指定用户时设置时当前用户的密码 |
| su - | 切换用户,一定要加上’-‘,否则只会切换家目录,但是环境没有切换,不指定用户时默认切换到root用户(记得先给root用户设置密码) |
| sudo | 以指定用户(root)身份执行命令 |
| visudo | 专门用于编辑/etc/sudoers文件的命令,需要将指定用户添加进去才可以使用sudo命令,如:test ALL=(ALL:ALL) ALL;使用sudo update-alternatives –config editor可以修改系统默认编辑器(nano) |
| groupadd | 新建用户组 |
| groupdel | 删除用户组 |
| gpasswd | 向指定组添加/删除指定的用户,如:gpasswd -a/-d user group |
| groups | 查看指定用户的组信息 |
| chsh | 修改指定用户的shell解析器,如:sudo chsh test -s /usr/sbin/nologin (禁止登陆) |
| chown | 修改文件所属用户[及用户组],如: sudo chown test[:test] 1.py,递归操作需要加’-R’选项 |
| chgrp | 修改文件所属用户组,如:sudo chgrp test 1.py |
涉及文件
相关名词
说明:在linux下,所有的文件都涉及权限,分为三组:所有者、所属组、其他
权限:所有文件的权限可以分为:可读(r)、可写(w)、可执行(x),’-‘表示没有改权限
原理:ls -l的结果,三位一组,分为三组,刚好对应:所有者、所属组、其他
修改权限:chmod,格式:chmod [身份] [操作] [权限] 文件
| 选项 | 说明 |
| —- | ———- |
| 身份 | |
| u | 所有者(user) |
| g | 所属组(group) |
| o | 其他(other) |
| 操作 | |
| + | 添加 |
| - | 去掉 |
| = | 设置 |
| 权限 | |
| r | 可读 |
| | 可写 |
| | 可执行 |
sudo chmod o+w 1.py,给其他用户添加可写的权限
本质:使用一组(3位)八进制的数据来表示权限,如:0755,展开如下:
1 | 转换为二进制:0755 => 111 101 101 |
简化操作:sudo chmod 0755 1.py
若要进行递归操作,则需要添加’-R’操作
umask
1 | 作用:用来限定新建文件的默认权限,权限与该值相反 |
find
作用:用于任意文件的搜索,功能非常强大
格式:find [目录] 条件选项
选项:
1 | -name:指定名字 sudo find / -name passwd |
whereis
作用:显示命令的详细信息,如:whereis ls,结果如下:
1 | ls: /bin/ls /usr/share/man/man1/ls.1.gz |
grep
作用:正则表达式搜索(文件内容)
选项:
1 | -i:忽略大小写 |
示例:
1 | grep -n /bin/bash /etc/passwd 查找/etc/passwd文件中包含/bin/bash的行,并显示行号 |
命令:ln
作用:创建一个文件或目录的链接
格式:ln [-s] 原文件 新文件
查看:ls -l结果集中的第一列就是文件类型,为’l’的就是链接文件
软链接与硬链接
1 | 硬链接:使用ln时不加-s选项创建的链接,相当于一个文件多起了一个名字而已,极少用到 |
硬链接
Xpath | JSONPath |
---|---|
/ | $ |
. | @ |
/ | . or [] |
.. | n/a |
* | * |
[] | [] |
| | [,] |
[] | ?() |
n/a | () |
() | n/a |
目录 | 说明 |
---|---|
/ | 根目录 |
/bin | 大多数的操作命令 |
/boot | 系统启动相关文件 |
/cdrom | 挂在光盘 |
/dev | 设备文件(linux下有一切设备皆文件之称) |
/etc | 配置文件目录(经常使用) |
/home | 所有普通用户的家目录,一个用户对应该目录下的一个文件夹 |
/lib | 库文件 |
/lib64 | 64位库文件 |
/lost+found | 系统出现异常时保存信息以便恢复,平时是空的 |
/media | 自动识别设备的挂载点 |
/mnt | mount,专门用于挂载的目录 |
/opt | option,用于安装可选软件 |
/proc | 虚拟的文件系统,可以映射硬件信息 |
/root | 超级用户(root)的家目录 |
/run | 存放系统运行时的文件,如:进程文件 |
/sbin | 超级用户使用的命令存放目录 |
/snap | Ubuntu自己搞的一个包管理系统 |
/srv | service,存储本机提供的数据或服务 |
/sys | 类似于proc,可以映射内核信息 |
/tmp | 保存随时可能销毁的临时文件 |
/usr | 之前的功能同home,现在是unix system resource,用户安装软件的目录 |
/var | 系统产生的不会自动销毁的文件,如:日志文件 |
常识:
简介:vi是默认的自带的终端编辑器,后来有了vi的加强版vim。被誉为”终端编辑器之神”
安装:sudo apt-get install vim
说明:所有操作都是在终端完成的,可以通过不同的模式切换来完成不同的功能。
工作模式:
正常模式(命令模式):使用vim打开的默认模式
命令/操作 | 说明
— | —
vim filename | 打开/新建一个文件
ESC | 切换到正常模式
ZZ(shift + zz) | 保存退出
!v | 打开最后使用vim打开的文件
光标定位 |
vim filename +n | 打开文件,将光标定位到第n行
vim filename + | 打开文件,将光标定位到尾行
gg | 定位到首行
G | 定位到尾行
ngg | 定位到第n行
^/0 | 定位到行首
$ | 定位到行尾
k | ↑
j | ↓
h | ←
l | →
ctrl + f | 下翻一页
ctrl + b | 上翻一页
ctrl + d | 下翻半页
ctrl + u | 上翻半页
内容处理 |
x | 向右删除一个字符
nx | 向右删除n个字符,n表示个数
X | 向左删除一个字符
nX | 向左删除n个字符,n表示个数
dd | 删除光标所在行
ndd | 删除光标开始的n行
p | 粘贴剪切板中的内容
yy | 复制光标所在行
nyy | 复制光标开始的n行
u | 撤销
ctrl + r | 反撤销
插入模式(输入模式):可以完成文件内容的输入编辑等,输入一下字符可以进入该模式:
命令 | 说明
— | —
i | 在光标位置插入
I | 在第一个非空字符插入
a | 在光标的下一个字符输入
A | 在行尾插入
o | 在光标所在的行下面插入空行
O | 在光标所在的行上面插入空行
s | 删除光标所在字符,并进入输入模式
S | 删除光标所在行,并进入输入模式
单行模式(编辑模式):可以完成文件的整体编辑保存等操作,输入’:’即可进入
命令 | 说明
— | —
:w | 保存
:q | 退出
:wq | 保存退出
:x | 保存退出
:w! | 强制保存
:q! | 强制退出,不保存修改
:e! | 放弃修改,恢复到修改之前的状态
:w newfile | 文件另存为
|
:set nu[mber] | 显示行号
:set nonu[mber] | 隐藏行号
:set tabstop=4 | 设置一个tab缩进4个字符
:set mouse=a | 启用鼠标的点击功能
|
[:]/内容 | 查找指定内容,n下翻,N上翻
[:]?内容 | 查找指定内容,N下翻,n上翻
:%s/原内容/新内容/[g] | 所有行内容替换,g表示全局(默认只能替换一行中第一处)
:m,ns/原内容/新内容/[g] | m到n行内容替换,g用法同上
光标定位 |
:n | 将光标定位到第n行,n表示行号
总结
source ~/.vimrc
###man使用
简介:是manul的缩写,是一个命令,可以查询系统中标准的帮助文档
使用:
命令 | 说明
— | —
man name | 查看指定内容(命令/函数)的帮助文档
q | 退出查询
↓ 或 enter | 向下翻一行
↑ | 向上翻一行
pageup | 向上翻一页
pagedown 或 空格键 | 向下翻一页
?内容 | 在帮助文档进行查找指定内容
总结:有问题,找男人。
sudo apt-get install mongodb
ps -ef | greop mongo
mongo
show dbs
db 或者 db.getName()
use python1801
show dbs
显示不出来db.dropDatabase()
exit 或 quit()
help
show collections
db.createCollection('user')
,创建一个空集合db.stu.insert({name:'lufei',age:22})
,直接使用不存在的集合,并且插入数据db.stu.drop()
增加文档:
1 | # 插入一条数据 |
1 | # 不指定_id字段,功能等价于insert |
更新文档
db.集合.update(query,update,{upsert:<boolean>, multi:<boolean>})
1 | db.user.update({isDelete:0}, {$set:{isDelete:1}}, {multi:true}) |
query:表示查询条件
update:表示更新设置,
$set:表示设置
$inc:表示增加
upsert:更新的查询结果不存在,是否作为新数据插入
multi:符合条件的数据是否全部更新,true表示全部更新,flase表示只更新一条
删除文档:
db.集合.remove(query, {justOne:<boolean>})
1 | db.user.remove({name:'binge'}) # 默认删除所有 |
查询文档:db.user.find()
db.集合.find(query,{key1:0,key2:0})
1 | db.user.find().pretty() |
1 | db.user.findOne({isDelete:0}) |
db.集合.find({<key>:{$gt:<value>}})
db.user.find({height:{$gt:166}})
db.user.find({height:{$gt:160,$lt:170}})
db.user.find().count()
db.集合.find({<key>:/正则表达式/})
db.集合.find({条件1,条件2})
db.user.find({isDelete:0, height:{$gt:170}})
db.集合.find({$or:[{条件1},{条件2}]})
db.user.find({$or:[{height:{$gt:175}},{height:{$lt:170}}]})
db.user.find().limit(1)
db.user.find().skip(1).limit(1)
db.集合.find().sort({<key>:1/-1})
db.user.find().sort({height:-1})
pip3 install pymongo
示例:
1 | import pymongo |
黑暗时期 =》 集中式版本控制 =》 分布式版本控制
sudo apt-get install git
git --version
,查看版本git config --global user.email "你的邮箱"
git config --global user.name "你的名字"
git config --global push.default simple|matching
git commit -a -m '提交日志'
git remote add origin 远程仓库地址
git push -u orgin master
git clone 远程仓库地址
git push
ssh-keygen -t rsa
,会在~/.ssh/目录下生成秘钥文件(id_rsa,id_rsa.pub)git pull
拉取操作并合并安装:sudo apt-get install mysql-server
安全配置:sudo mysql_secure_installation
连接测试:mysql -h host -u user -p
-h:指定主机,localhost/127.0.0.1表示本机,本机可以省略
-u:指定用户,默认只有root用户
-p:指定密码,输入密码时要与登录分开,以防不测
示例:mysql [-hlocalhost] -uroot -p
,然后根据提示输入密码
show databases;
,会显示数据库服务器上所有的数据库create database test;
,创建数据库testdrop database test;
,删除数据库testuse test;
,选择数据库testshow tables;
,查看当前选中数据库中的数据表create table user(username varchar(20), password char(32));
desc user;
drop table user;
show create database test;
show create table user;
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
,在[mysqld]后面添加character-set-server=utf8
sudo service mysql restart
alter table user modify username char(30);
,不能修改名字alter table user add age int(3);
alter table user add email varchar(60) after password;
alter table user add id int(11) first;
alter table user drop age;
alter table user change email em char(32);
alter table user modify em char(32) first;
alter table user rename new_user;
整型:tinyint(1个字节)、smallint(2个字节)、mediumint(3个字节)、int(4个字节)、bigint(8个字节)
浮点类型:
字符类型:
时间日期:
符合类型:
字段修饰:
字符集及存储引擎
show character set;
,我们通常只使用utf8,不能书写成utf-8show engines;
索引:
说明:简单理解,就是一本书最前面的目录,虽然可以提高读取效率,单并非越多越好。
分类:
示例:
1 | alter table user add index(em); # 给em字段添加普通索引 |
alter table 表名add fulltext(字段);
很多选项都可在创建表时指定,如:
1 | create table user( |
太多了暂时看这里
说明:在最大多数的使用中,都是对数据的增、删、改、查的操作(CURD)
准备:创建一个star表
1 | create table star( |
插入数据:
方式1:不指定字段,按照数据表的数据添加一条数据的全部字段
1 | insert into star values(1,'黄晓明',200000,'山东',28,0); |
可以同时插入多条数据,每条一个小括号。
方式2:指定字段,只需要传递指定字段的值
1 | insert into star(name,money,age,sex,province) values('小岳岳',4000000, 33, 0, '河南'); |
可以同时插入多条数据,每条一个小括号
方式3: SQL实现将一个表的数据插入到另外一个表的代码
1 | #如果只希望导入指定字段,可以用这种方法: |
方式4: 向表 charger 插入一条数据,已存在就对表 charger 更新 type
,update_at
字段;
1 | INSERT INTO `charger` (`id`,`type`,`create_at`,`update_at`) VALUES (3,2,'2017-05-18 11:06:17','2017-05-18 11:06:17') ON DUPLICATE KEY UPDATE `id`=VALUES(`id`), `type`=VALUES(`type`), `update_at`=VALUES(`update_at`); |
注意:什么情况下可以不传字段值
说明:插入数据通常使用方式2,可以根基需要进行数据的插入。
查询数据:
select * from star;
删除数据:
delete from star where id=1;
修改数据:
update star set age=22,money=8000000 where id=6;
基础查询:select * from star;
指定字段查询:select id,name,money from star;
排除重复记录:select distinct name from star;
UNION:操作符用于合并两个或多个 SELECT 语句的结果集。SELECT E_Name FROM Employees_China UNION SELECT E_Name FROM Employees_USA
列出所有在中国表(Employees_China)和美国(Employees_USA)的不同的雇员名
指定条件查询:
条件:
| 符号 | 说明 |
| ——————— | ————— |
| > | 大于 |
| >= | 大于等于 |
| < | 小于 |
| <= | 小于等于 |
| = | 等于 |
| != 或 <> | 不等于 |
| and | 并且 |
| or | 或者 |
| [not] between m and n | [不]在指定[m,n]的闭区间 |
| [not] in | [不]在指定的集合中 |
| [not] like | 模糊匹配,%表示任意字符 |
示例:
1 | select id,name,money from star where id > 4; |
结果集排序:
select id,name,money from star order by money desc;
select id,name,money,age from star order by money desc,age asc;
限制结果集:
示例:
1 | select id,name,money from star limit 3; # 取3条数据 |
用途:分页显示,假设一页显示10条数据
1 | 第一页:limit 0, 10 |
常用聚合函数
| 函数 | 功能 |
| —– | —- |
| count | 统计个数 |
| sum | 求和 |
| max | 最大值 |
| min | 最小值 |
| avg | 平均值 |
- 使用count时指定任何字段都行
- 使用其他函数时必须要指定字段
示例:
1 | select count(*) from star; |
as可以给字段其别名
分组操作
示例:
1 | select * from star group by sex; # 分组 |
结果集过滤:
示例:
1 | select count(*) as c,province from star group by province having c>1; |
搜索所有记录,然后按照省份分组,统计成员大于1的省份
create user '用户名'@'主机' identified by '密码'
create user 'jerry'@'%' identified by '123456'
grant 权限 privileges on 库.表 to '用户'@'主机' identified by '密码'
grant all privileges on test.* to 'jerry'@'%' identified by '123456'
show grants for '用户'@'主机'
show grants from 'jerry'@'%'
flush privileges;
revoke 权限 privileges on 库.表 from '用户'@'主机';
revoke all privileges on test.* from 'jerry'@'%';
drop user '用户'@'主机'
drop user 'jerry@'%'
sudo mysql_secure_installation
,根据提示配置,允许root用户远程登录sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
grant all privileges on *.* to 'root'@'%' identified by '123456'
select username,name from user,goods where user.gid=goods.gid;
select username,name from user [inner/cross] join goods on user.gid=goods.gid;
select username,name from user left [outer] join goods on user.gid=goods.gid;
外右连接:以右表为主
子(嵌套)查询操作
select * from user where gid in (select gid from goods);
update user u,good g set u.gid=0,g.price=8000 where u.gid=g.gid and u.id=1
###清空数据
delete from aaa;
truncate table aaa;
set autocommit=0;
rollback;
commit;
简介:所谓外键就是一个表的主键作为了另一个表的关联字段,然后在添加一点设置就成为了外键
作用:可以简化多个关联表之间的操作,如:删除一个另一个跟着删除
示例:一个表示用户组的表t_group,一个用户表t_user
1 | create table t_group( |
约束行为
备份:mysqldump u-uroot -p test > test.sql
恢复:mysql -uroot -p test < test.sql
安装pycharm,并配置解析器
sudo apt-get install python3-pip
pip3 install pymysql
1 | import pymysql #在 Windows 系统上,import PyMySQL 和 import pymysql 有区别。 |
运行此脚本时,会产生以下结果1
Database version : 5.7.14-log
COMMIT操作
提交是一种操作,它向数据库发出信号以完成更改,并且在此操作之后,不会更改任何更改。1
db.commit()
回滚操作
如果您对一个或多个更改不满意,并且要完全还原这些更改,请使用rollback()
方法。
1 | db.rollback() |
断开数据库连接
要断开数据库连接,请使用close()方法。
1 | db.close() |
如果用户使用close()方法关闭与数据库的连接,则任何未完成的事务都将被数据库回滚。 但是,您的应用程序不会依赖于数据级别的实现细节,而是明确地调用提交或回滚。
符合自己需求的python脚本
由于自己和公司所使用的是云服务器,均已安装crontab,所以这里略过,有需要的小伙伴可以看看此篇文章
这里有两种方法进行定时任务添加,分别是crontab -e
和编辑/etc/crontab
。两种方法的语法也略有不同,/etc/crontab
的语法比crontab -e
多了一个用户字段。
crontab -e 用户级,不能设置用户字段
/var/spool/cron/username
中。但有的linux
系统加在crontab -e
会无效,这种方法不会对语法进行校验。具体操作步骤为:1 | crontab -e |
添加定时任务,如每周一3点执行python脚本
1 | 0 3 * * 1 python /data/www/test.py |
wq保存退出,完毕
语法为:
1 | # Example of job definition: |
直接编辑/etc/crontab
1 | # Example of job definition: |
直接编辑/etc/crontab 比 crontab -e 多了一个用户名字段,该方法是系统级的,必须root权限使用
步骤:
1 | vi /etc/crontab |
在后面添加定时任务,如每周一3点执行python脚本
1 | 0 3 * * 1 root python /data/www/test.py |
wq保存退出,完毕
具体语法请看此篇文章
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true