1. 前面先写import导入模块,完整的语法是:
[from 模块名] import [模块 | 类 | 变量 | 函数 | *] [as 别名]
语法还可以是:
from 模块名 import 功能名
如果import整个模块的话,需要用.功能名(),来用这个功能,如果直接from模块import功能的话,就不用点.,直接可以用功能名()。这里说的功能名就是函数名
from 模块名 import *
可以导入这个模块的全部功能,和直接import 模块名不同的是,函数的写法不同,这个可以直接写函数名(),而前面那一种需要写模块名.函数名()来调用函数
2. 一个模块就是一个Python文件,这个模块里面都有什么类什么函数什么变量,可以直接按着键盘的ctrl,然后点击这个模块的名称,pycharm软件就会打开这个模块对应的.py的文件,也就是这个模块的python文件,里面就可以看到这个模块的具体定义,如果需要的话。
3. 运维常用的模块,首先是subprocess.run(),然后里面写上[shell=true],就可以跑linux命令。然后是shlex.split(),shell lexi shell词法
4. .strip()方法是python的字符串方法,去掉字符串收尾的空格、换行符\n、制表符\t等
在让用户从终端粘贴token的时候,防止用户多粘贴了空格啥的,用
token = input("请粘贴k8s的token: ").strip()
这样就会从终端输入获取一个纯字符串的token字符串。
5. 一个可用的python脚本,应该可以这样:
import subprocess
import shlex
token = input("Enter your k8s token: ").strip()
cmd_str = f'kubectl -n haha get deploy --token "{token}"'
cmd = shlex.split(cmd_str)
try:
result = subprocess.run(cmd, check=True, capture_output=True, text=True)
print("Success")
print(result.stdout)
except subprocess.CalledProcessError as e:
print(e.stderr)
except Exception as e:
print(e)
6. .split()字符串方法默认是按任意空白字符(空格、 换行\n、 制表符\t等)分割字符串,自动忽略连续多个的空白字符,并返回一个列表
7. try except finally的结果,用自然语言的角度来看,就像是试着做这个这个,如果没做成,就是没有尝试成功,除非哪里哪里错了,把这个错了的拿出,排除,排除这些不能try成功的as什么什么,然后把这些不能try成功的print出来,然后最后不管成功没成功,就finally什么什么。简单的是except exception as e: 然后print或其他动作做什么事。这么来看,之前用ansible的时候,就一直是这个语法。ansible就是用这个python写的,所以用这个语法结构,还有一个ansible用的jinja2 template语法,也是python里面的语法
8. 运维常用的模块还有time模块,time.sleep()方法
9. 这么来看,python有两个优点比较明显,python的模块库很多,好像是有几十万个,而且每个人都可以在编写库好像,就是自己写一个模块,就是使用者想用什么功能,基本上都可以在系统库或者三方库里面找到别人已经写好得库和方法,可以直接拿来用,如果不知道有什么库能实现自己想要的结果,那可以查,问AI,所以比较方便,不用什么功能都得自己写。就和运维工程师要实现什么服务器级别的功能,基本上都有很多Apache和其他的开源工具可以用,包括docker k8s也都是开源工具,hadoop好像也是,dolphinscheduler也是。第二个优点是,用法贴近自然语言,对于中国人来说就是很偏向英语,如果对于英语的单词比较了解,就可能用python来写自己想要的功能会比较方便,那么有点不好弄的点就是,刚开始对python的语法结构不熟悉,什么是什么,没有基础的话,也是觉得挺难的。所以把这些基础熟悉熟悉,用一用,学习学习,应该就可以用python来实现一些功能了,基础比如是import导入模块是什么意思,as什么什么是什么意思,点.是什么意思,什么情况用点.,什么情况不用点.,小括号是什么意思,中括号是什么意思,大括号是什么意思,还有try except finally语法结构。大括号在python里面主要是有字典、集合、格式化字符串字面量的意思,就是把变量用大括号括起来,可以放到f'xxx' 方法里面,就是f'hello "{name}"'这样去用,使用f-string时,大括号内直接引用变量。python里面通过点“.”确定层级关系。python的模块,如果需要的话,自己可以写,其实自己写的python文件里面的函数,就是一个模块的方法,自己把from 模块名(自己之前写的python文件的名称,不包含.py的后缀) import 函数名,就可以用自己之前写的python文件里面的函数来在新的文件中用了。
10. pycharm里面变灰的行,是没有使用的,或者注释掉的,其实注释掉的也属于是没有使用的
11. __name__是python文件里面的一个内置变量,当运行一个python文件的时候,这个内置变量默认的值为__main__,这个python文件被当成模块导入的时候,这个__name__变量的值就不是__main__了,这样就,如果要把这个python脚本作为模块使用的时候,这个里面的函数就要写到if __name__ = __main__里面,否则,别的脚本一导入这个模块,什么都没写,然后运行这个别的脚本文件,就会自动执行模块里面的函数。
12. python的模块就是一个python的文件,python的包就是一个python的文件夹
13. def是定义函数,class是定义类的
14. 函数主要是提供功能的
15. 数据库相当于农田,滋养数据,SQL相当于农具,帮助我们更好的管理农田
16. Hbase是照着谷歌发表的论文《Bigtable: A Distributed Storage System for Structured Data》大表:结构化数据分布式存储系统做的
17. 数据库软件提供数据组织存储的能力,SQL是操作数据库的语言工具
18. SQL语言是操作数据库的专用工具
19. SQL语言,大小写不敏感
20. SQL中只支持单引号,表示字符串字面量
21. DML
insert into tablename[(colume1, colume2, ..., columen)] values()
update tablename set xxx=xxx [where ...]
delete from tablename where ...
22. DQL分组聚合,先分组,后聚合
分组: group by
SELECT 字段 | 聚合函数 FROM 表 [WHERE 条件] GROUP BY 列
聚合函数有:
- SUM(列) 求和
- AVG(列) 求平均值
- MIN(列) 求最小值
- MAX(列) 求最大值
- COUNT(列 | *) 求数量
聚合函数爱写谁写谁,但是非聚合函数中,GROUP BY 后面写了谁, 前面SELECT才能写谁。不然语法会有歧义
一个SQL语句里面可以统计多个聚合函数
GROUP BY中出现了哪个列, 哪个列才能出现在SELECT中的非聚合中
23. 结果排序
24. 结果分页查询
25. alter table student add column gender varchar(10),给表添加新字段
from pymysql import Connection
conn = Connection(
host="localhost",
port=3306,
user="root",
password="xxxxxxxx",
autocommit=True,
)
cursor = conn.cursor()
conn.select_db("world")
cursor.execute("insert into student values(10002, 'lisi', 31, '男')")
conn.close()
26. OOP
类的名称加一个括号(),就可以创建一个对象
对象.变量名的形式,就可以为它赋予具体的值了
用对象组织数据的思路
类的属性,是定义在类中的变量,叫成员变量
类的行为,是定义在类中的函数,叫成员方法
类外部的函数,叫函数
类内部的函数,叫方法
在成员方法中,访问成员变量,就需要用到self,这个self应该指的是类的意思,也就是这个类内部的函数,要访问类内部的变量,而不是类外部的变量,所以就要带上一个self,也就是我这个类里面的变量,而不是类外部的变量。
27. self必须存在在成员方法的参数列表里,但是在调用的时候,可以当这个self不存在
28. 通过占位的形式,拼接字符串,占位型拼接
%s 是 string 字符串
%d 是 decimal 十进制数
%f 是 float 浮点数
快速字符串格式化方式语法:
f"内容{变量}"
这样比%更加方便
f是format格式化的首字母
29. 表达式
表达式,是一条具有明确执行结果的代码语句
30. 传参列表,形式参数列表
self是类本身的意思
类是一种程序内的“设计图纸”,需要基于图纸生产实体(对象),才能正常工作
这种套路,成为面向对象编程
设计类,创建对象
类名称加一个括号(),就可以产生一个实体对象
面向对象编程:
1. 设计类
2. 基于类创建对象
3. 由对象做具体的工作
面向对象编程,就是让对象干活
类内置方法
内置的类方法,也成为魔术方法
前面两个下划线后面两个下划线的方法,基本上都是python里面内置的魔术方法