文章目录
-
-
- [1. 安装python](#1. 安装python)
- [2. 安装vscode](#2. 安装vscode)
- [3. python语法](#3. python语法)
-
- [3.1 流程控制](#3.1 流程控制)
-
- [3.1.1 条件语句](#3.1.1 条件语句)
- [3.1.2 循环语句](#3.1.2 循环语句)
- [3.2 模块与包](#3.2 模块与包)
-
- [3.2.1 模块](#3.2.1 模块)
- [3.2.2 包](#3.2.2 包)
- [3.3 数据类型](#3.3 数据类型)
-
- [3.3.1 数字(Number)](#3.3.1 数字(Number))
- [3.3.2 字符串(string)](#3.3.2 字符串(string))
- [3.3.3 列表(list)](#3.3.3 列表(list))
- [3.3.4 元组(tuple)](#3.3.4 元组(tuple))
- [3.3.5 集合(set)](#3.3.5 集合(set))
- [3.3.6 字典(dict)](#3.3.6 字典(dict))
- [3.4 异常处理](#3.4 异常处理)
- [3.5 类、对象、方法](#3.5 类、对象、方法)
-
- [3.5.1 类与对象](#3.5.1 类与对象)
- [3.5.2 成员变量和成员方法](#3.5.2 成员变量和成员方法)
- [3.5.3 构造方法](#3.5.3 构造方法)
- [3.5.4 Python类内置的类方法:](#3.5.4 Python类内置的类方法:)
- [3.6 面向对象](#3.6 面向对象)
-
- [3.6.1 封装](#3.6.1 封装)
- [3.6.2 继承](#3.6.2 继承)
- [3.6.3 多态](#3.6.3 多态)
- [3.7 文件操作](#3.7 文件操作)
- [3.8 变量的类型注解](#3.8 变量的类型注解)
- [3.9 操作MySQL](#3.9 操作MySQL)
-
- [3.9.1 操作步骤](#3.9.1 操作步骤)
- [3.9.2 建表](#3.9.2 建表)
- [3.9.3 单条插入SQL](#3.9.3 单条插入SQL)
- [3.9.4 批量插入](#3.9.4 批量插入)
- [3.9.5 查询SQL](#3.9.5 查询SQL)
- [3.9.6 更新SQL](#3.9.6 更新SQL)
- [3.9.7 删除SQL](#3.9.7 删除SQL)
- [3.10 操作mongodb](#3.10 操作mongodb)
-
- [3.10.1 操作步骤](#3.10.1 操作步骤)
- [3.10.2 增删改查](#3.10.2 增删改查)
- [3.11 发送http请求](#3.11 发送http请求)
-
- [3.11.1 发送post请求 json格式](#3.11.1 发送post请求 json格式)
- [3.11.2 发送post请求 form-data格式](#3.11.2 发送post请求 form-data格式)
- [3.11.2 发送get请求](#3.11.2 发送get请求)
-
1. 安装python
官网链接 windows7最高安装版本3.8.10
安装过程选择Add Pytyon 3.8 to PATH,这样就可以在任意路径使用Python了,同时也可以自定义一下Python的安装路径,不建议选在C盘。
Win+R打开命令行界面,输入python --version,会显示Python的版本号,至此Pytyon安装就已经完成。
linux版本python --version,默认的是python3以下的版本,想看python3的版本,需要输入python3 --version
2. 安装vscode
官方链接,直接下载windows版本即可。
下载后选择安装在非C盘,五个框框都勾选,然后一路next即可愉快地进行python编程了。
安装插件:设置-->扩展-->应用商店搜索对应插件
安装Python插件:VS Code官方自带插件
3. python语法
python对缩进要求比较严格,以Tab键或者4个空格进行缩进。与java不同,并没有{}进行代码段的控制,而是通过缩进来控制代码段。虽然java也可省略{},但不推荐。且python末尾的分号";"可有可无,java必须有。
注释:
单行注释采用#,可以使用ctrl+/快速注释。
多行注释: 以 一对三个双引号 引起来 (""" """)来解释说明一段代码的作用使用方法
三引号即能用做 多行注释 又能用做 字符串定义
3.1 流程控制
3.1.1 条件语句
if 语句
python
age=18
if age>=18:
print("成年")
if-else 语句
python
age=17
if age>=18:
print("成年")
else:
print("未成年")
if-elif-else 语句
python
age=17
if age>=65:
print("老年")
elif age>=35:
print("中年")
else:
print("青少年")
3.1.2 循环语句
Python支持两种循环语句:while和for。
while循环
python
i=0
sum=0
while i<=10:
sum+=i
i+=1
print(sum)
for循环
Python中的for比较特殊,只能迭代列表、字符串等任意序列,不能迭代算数递增值,或者定义结束条件。
如果想要跳出循环或者跳过本次循环?使用break/continue ,这与java中保持一致。
python
names=['北方有佳人','遗世而独立','一顾倾人城','再顾倾人国']
for name in names:
print(name)
如果想对数字序列进行迭代就得用到range()函数:
python
for i in range(11):
print(i)
python定义函数
python
def printNum(num):
print(num);
return True;
printNum(10);
def: python中用def关键字定义函数
printNum:函数名
num:函数的形参
print(num):函数体
return True:函数的返回值
3.2 模块与包
3.2.1 模块
一个Python文件,以.py 结尾,能定义函数,类和变量,也能包含可执行的代码
通过函数我们可以实现很多代码的复用,但是所有的函数我们也不能都写在一个文件里,必须拆分文件。文件拆分后,就得用到Python的模块来调用函数。
导入语法:
[from 模块名] import [模块|类|变量|函数|*] [as 别名]
*表示导入所有
常用的组合形式如:
import 模块名
from 模块名 import 类、变量、方法等
from 模块名 import *
import 模块名 as 别名
from 模块名 import 功能名 as 别名
from可以省略,直接import
as别名可以省略
通过"."来调用模块提供的功能
模块的导入一般写在代码文件的开头位置
新建test.py文件
python
def printNum(num):
print(num);
导入test模块,并调用printNum函数
python
import test
test.printNum(100)
注意一
在实际开发中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,开发人员可能会在在py文件中添加一些测试信息。此时,无论是当前文件,还是其他已经导入了该模块的文件,在运行的时候都会自动执行测试信息
python
# 只在当前文件中运行条件才为True,导入其他文件时均为False
if __name__ == '__main__':
# __main__ 运行时程序的名称
# __name__ 系统自动赋值,不用管
# 在Run时为 __main__
# 未Run时为 文件名称
注意二
当导入多个模块的时候,如果模块内有同名功能,且未使用用法一导入形式,后面导入的模块将会覆盖前面模块内同名的功能。
注意三
如果一个模块文件中有__all__变量,当使用from xxx import *导入时,只能导入这个列表中的元素
3.2.2 包
当Python的模块太多了,就可能造成一定的混乱,此时可以通过Python包的功能来管理。
从物理上看,包就是一个文件夹,在该文件夹下包含了一个 init.py 文件,该文件夹可用于包含多个模块文件
从逻辑上看,包的本质依然是模块
自定义包
当我们的模块文件越来越多时,包可以帮助我们分类管理这些模块,包的作用就是包含多个模块,但本质依然是模块。新建包后,包内部会自动创建__init__.py文件,这个文件控制着包的导入行为
导入包
导入包与导入模块几种方式类似,例如:
python
import 包名.模块名
包名.模块名.功能名()
限制导入
可以在__init__.py文件中添加__all__ = ['模块名'],控制允许导入的模块列表
与导入模块类似__all__只针对from 包名.模块名 import *而对其他方式无效
安装第三方包
第三方(其他人)开发的,Python没有内置,需要先安装才可以导入使用
如何安装?只需要使用Python内置的pip程序即可
在终端中输入如下指令即可通过网络快速安装第三方包:pip install 包名称
提高安装速度
python
由于pip是连接的国外的网站进行包的下载,下载速度经常很慢。
我们可以通过如下命令,让其连接国内的网站进行包的安装:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称
# 网站为清华大学提供的一个网站,可供pip程序下载第三方包
3.3 数据类型
Python是一种面向对象的编程语言,所有的数据类型都是类,每个数据值都是类的"实例",并且不需要显式声明变量的类型。
在Python中有6种主要的内置数据类型:数字(Number)、字符串(string)、列表(list)、元组(tuple)、集合(set)和字典(dict)。
变量无类型而数据有类型,可使用 type(变量) 查看数据的类型
3.3.1 数字(Number)
Python中常用的数字类型有两种:整数(int)、浮点(float)。
其中/会永远返回浮点数float,Python只支持双精度的浮点数float,返回int需要用//
int和float转换,类似java的强转 int(float) float(int)
python
print(101//10)
print(100%10)
print(int(6.6))
print(float(6))
10
0
6
6.0
算数运算符:
python
加减乘取余与java相同
/ 除 直接除返回商
// 整除 返回商的整数部分
** 指数 a**b 为a的b次方
+=,-=,*=,/=,%=,//=,**=
逻辑运算符
and 逻辑与运算,等价于数学中的"且" a and b 当 a 和 b 两个表达式都为真时,a and b 的结果才为真,否则为假。
or 逻辑或运算,等价于数学中的"或" a or b 当 a 和 b 两个表达式都为假时,a or b 的结果才是假,否则为真。
not 逻辑非运算,等价于数学中的"非" not a 如果 a 为真,那么 not a 的结果为假;如果 a 为假,那么 not a 的结果为真。相当于对 a 取反。
3.3.2 字符串(string)
字符串是最常用的数据类型,需要用 双引号" " 或者 单引号' ' 或者 三引号""" """ 包围起来。
任何类型,都可以通过str(),转换成字符串。
字符串内必须真的是数字,才可以将字符串转换为数字,否则会报错。
字符串连接可以直接使用+
如果字符串本身包含单引号''或者双引号"",可以使用转义符\
字符串可以和数字相互转化,字符串转数字可以用int()或float(),数字转字符串可以用str()
字符串支持下标访问,包括正向索引(正数),和反向索引(负数)
字符串使用find()查找,replace()替换,split()切割
python
str1 = "helloworld"
print(str1[5])
print(str1[-4])
print(str1.find('w'))
print(str1.replace('w','W'))
print(str1.split('l'))
w
o
5
helloWorld
['he', '', 'owor', 'd']
3.3.3 列表(list)
线性表这种数据结构我们都比较熟悉,Python中的实现是list,类似于Java中的ArrayList,list中可以放入任意类型的变量:
list初始化可以使用[]:
元素可以直接通过下标访问:
通过append()方法添加元素
通过insert(i,x)方法在指定位置 插入元素
替换元素,可以直接list[i]=x
删除元素,使用remove(x)方法,此处的x是具体的值,而不是下标,且x如果不存在于list,则会报错
python
list1=[];
list1.append('hello')
print(list1)
list1.insert(0,'world');
print(list1)
list1.remove('world');
print(list1);
list1[0]='HELLO';
print(list1);
['hello']
['world', 'hello']
['hello']
['HELLO']
列表循环
for循环列表
python
names=['北方有佳人','遗世而独立','一顾倾人城','再顾倾人国']
for name in names:
print(name)
while循环,根据下标循环list
python
names=['北方有佳人','遗世而独立','一顾倾人城','再顾倾人国']
len=len(names)
i=0
while i<len:
print(names[i])
i=i+1;
用enumerate() 函数可以同时取出位置索引和对应的值:
python
names=['北方有佳人','遗世而独立','一顾倾人城','再顾倾人国']
for i,v in enumerate(names):
print(i,v)
3.3.4 元组(tuple)
列表(list)是一种可变的序列类型,元组(tuple)是一种不可变的序列类型,由多个用逗号隔开的值组成:
python
t='hello','world'
print(t[0]);
hello
3.3.5 集合(set)
集合(set)是一种可迭代的、无序的、不能包含重复元素的容器类型的数据,类似于Java中的Set。集合的添加用add(),删除用remove()
3.3.6 字典(dict)
字典(dict)是一种key,value类型的数据结构,类似于Java中的Map。
可以直接根据key找到value
添加和更新元素都可以直接通过key
使用pop()删除元素
python
dic={"hello":"world","spring":"boot"}
print(dic);
dic['spring']='mvc';
print(dic)
print(dic['hello'])
dic.pop('spring')
print(dic)
{'hello': 'world', 'spring': 'boot'}
{'hello': 'world', 'spring': 'mvc'}
world
dict_keys(['hello', 'spring'])
{'hello': 'world'}
字典遍历
python
hero_dict={'吕布':100,'赵云':98,'典韦':96}
# 遍历字典中的元素
for k,v in hero_dict.items():
print(k,v)
# 遍历字典中的元素
for k in hero_dict:
print(k,hero_dict[k])
# 遍历keys
for k in hero_dict.keys():
print(k,hero_dict[k])
# 遍历values
for v in hero_dict.values():
print(v)
3.4 异常处理
用try/except/finally语句来捕获异常。
python
try:
num=10/0
except Exception as e:
print(e)
finally:
print('end')
3.5 类、对象、方法
什么是面向对象
万物皆对象
现实世界的事物都有属性和行为,可在程序中抽离为类来描述现实世界的事物属性和行为
3.5.1 类与对象
使用类封装属性,基于类创建出一个个的对象来使用
创建类的语法
class:关键字,表示要定义类了
类的属性:定义在类中的变量(成员变量)
类的行为:定义在类中的函数(成员方法)
python
# 创建类
class 类名称:
类的属性(成员变量)
类的行为(成员方法)
# 基于类创建对象
对象名 = 类名称()
# 调用
对象名.成员变量
对象名.成员方法()
3.5.2 成员变量和成员方法
成员变量
定义在类内部的变量称之为成员变量,用法与正常变量一致。
成员方法
定义在类内部的函数称之为方法,与函数存在细微区别。
python
# 函数
# 形参可以为0-N个
def 函数名(形参1,形参2,..,形参N):
函数体
# 方法
# 形参可以为0-N个
# self关键字必须填写
def 方法名(self,形参1,形参2,..,形参N):
方法体
self关键字在成员方法定义的时候必须填写,表示类对象自身
在方法内部,想要访问类的成员变量,必须使用self
当我们使用对象调用方法的时,self会自动被python传入,虽然在参数列表中,但是传参的时候可以不传。
3.5.3 构造方法
通过传参的形式快速对属性赋值
在类可以使用:init()方法,即构造方法,快速为对象赋值。简化形式:可以省略成员属性定义,但仍可调用
在创建类对象(构造类)的时候,会自动执行,将传入参数自动传递给__init__方法使用。
构造方法也是成员方法,定义时也需要在参数列表中提供:self
变量定义在构造方法内部,如果要成为成员变量,需要用self来表示,例如self.age
使用了构造方法,创建对象时必须传参否则会报错
3.5.4 Python类内置的类方法:
init 构造方法,可用于创建类对象的时候设置初始化行为
str 字符串方法,用于实现类对象转字符串的行为
lt 用于2个类对象进行小于(<)或大于(>)比较
le 用于2个类对象进行小于等于(<=)或大于等于(>=)比较
eq 用于2个类对象进行相等(==)比较
3.6 面向对象
面向对象包含3大主要特性:封装,继承,多态
3.6.1 封装
封装就是隐藏对象的内部细节,外部只管调用就行了。
Python中的变量默认是公开的,可以在外部的类中访问它们,如果想让它们变为私有变量,在变量前加上双双下画线(__)就行了,变量的获取和设置可以通过get()、set()方法。
基本语法:
python
私有成员变量:变量名以__开头(2个下划线)
私有成员方法:方法名以__开头(2个下划线)
3.6.2 继承
一个类继承另外一个类的所有成员变量和成员方法(不含私有)
多继承和单继承
一个类也可以继承多个类,也可以继承一个类
多个父类中,如果有同名的成员,默认以继承顺序(从左到右)为优先级。即:后继承的被先继承的覆盖
基本语法:
python
class 类名(父类1,父类2,...,父类N):
类内容体
重写
子类继承父类的成员属性和成员方法后,如果对其"不满意",那么可以进行重写。即:在子类中重新定义同名的属性或方法。
一旦重写父类成员,那么类对象调用成员的时候,就会调用重写后的新成员
如果需要使用被复写的父类的成员,只能在子类内通过如下方式调用父类的同名成员:
方式一:使用父类名调用
使用成员变量:父类名.成员变量
使用成员方法:父类名.成员方法(self)
方式二:使用super()调用
使用成员变量:super().成员变量
使用成员方法:super().成员方法()
3.6.3 多态
多种状态,即完成某个行为时,使用不同的对象会得到不同的状态
抽象类(接口)
抽象类就好比定义一个标准,包含了一些抽象的方法,要求子类必须实现
抽象类:包含抽象方法的类
抽象方法:没有具体实现的方法(只含pass)称之为抽象方法
pass是占位语句,用来保证函数(方法)或类定义的完整性,表示无内容,空的意思
多用于做顶层设计(设计标准),以便子类做具体实现。是对子类的一种软性约束,要求子类必须复写(实现)父类的一些方法
并配合多态使用,获得不同的工作状态。
3.7 文件操作
文件操作主要包括打开、关闭、读、写等操作文件的打开
基本格式
在Python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件
基本语法:
open(name, mode, encoding)
python
# name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。
# mode:设置打开文件的模式(访问模式):只读、写入、追加等。
# encoding:编码格式(推荐使用UTF-8)
打开模式
文件常用的三种基础访问模式,可通过mode指定。
r->read(读取),w->write(写入),a->append(追加)
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,原有内容会被删除。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,新的内容将会被写入到已有内容之后。 如果该文件不存在,创建新文件进行写入。
f = open("./source.log", "r", encoding="UTF-8")
文件的读取
read(num) 读取指定长度字节 不指定num读取文件全部
readline() 读取一行
readlines() 读取全部行,返回列表
for line in 文件对象 for循环文件行,一次循环得到一行数据
close() 关闭文件对象
with open() as f 通过with open语法打开文件,可以自动关闭
每次读取会从上一次读取结束的位置开始,每次open()中的内容只能被读取一次
文件的写入使用示例:
python
f = open("C:/code/test.txt", "w")
# 文件如果不存在,使用"w"模式,会创建新文件
# 文件如果存在,使用"w"模式,会将原有内容清空
# 2.文件写入
f.write('hello world')
# 3. 内容刷新
f.flush()
直接调用write,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区
当调用flush的时候,内容会真正写入文件
close()方法,附带flush()方法的功能
这样做是避免频繁的操作硬盘,导致效率下降(攒一堆,一次性写磁盘)
文件的追加
使用w模式,每次写入会将原有内容清空,写入新内容
使用a模式,文件不存在会创建文件,文件存在会在最后追加内容写入文件
使用示例:
python
f = open("C:/code/test.txt", "a")
# 2.文件写入
f.write('study')
# 3. 内容刷新
f.flush()
3.8 变量的类型注解
Python中类型注解仅仅起到提示作用,没有其他语言那么严格
Python解释器不会根据类型注解对数值做验证和判断,无法对应上也不会导致错误
语法格式
变量名: 数据类型 = 数值
python
var_1: int = 10
var_2: bool = True
# 定义学生类
class Student:
pass
stu: Student = Student() # 学生类类型注解
my_list: list = [1, 4, 7]
my_list: list[int] = [2, 5, 8] # 限定数据类型为int
my_tuple: tuple[str, int, bool] = ("hello", 111, False)
my_dict: dict[str, int] = {"age": 13}
函数的类型注解
def 函数方法名(形参名1:类型,形参名2:类型) -> 返回值类型:
函数体
python
def add(x: int, y: int) -> int:
return x + y
Union类型
联合类型注解,在变量注解、函数(方法)形参和返回值注解中均可使用
需要导包使用
当数据类型不唯一时基本格式无法满足要求,此时便可使用Union类型
使用示例,Union[类型,类型]:
python
from typing import Union
# 数据为字符串和整数
my_list: list[Union[str, int]] = [66, "hello", 88, "world"]
# 键为字符串,值为字符串和整数
my_dict: dict[str, Union[str, int]] = {"name": "zhangsan", "age": 18}
python
from typing import Union
# 接收字符串或整数,返回字符串或整数
def func(data: Union[int, str]) -> Union[int, str]:
pass
3.9 操作MySQL
在Python中,通过使用第三方库:pymysql,完成对MySQL数据库的操作。
安装指令:pip install pymysql
pymysql在执行数据插入或其它产生数据更改的SQL语句时,默认是需要提交更改的,即,需要通过代码"确认"这种更改行为。
如果不想手动commit确认,可以在构建连接对象的时候,设置自动commit的属性。
查询后,使用游标对象.fetchall()可得到全部的查询结果封装入嵌套元组内
可使用游标对象.execute()执行SQL语句
3.9.1 操作步骤
导包->建立连接->执行操作->关闭连接:
python
# 导包
from pymysql import Connection
# 建立连接
conn = Connection(
host='10.100.56.51', # 主机名或IP地址
port=3306, # 端口号,默认3306
user='root', # MySQL账号
password='123456', # MySQL密码
autocommit=True # 设置自动提交(commit)
)
# 执行操作
print(conn.get_server_info())
# 关闭连接
conn.close()
3.9.2 建表
将执行操作改为建表SQL
python
"""
建表SQL
"""
# 获取游标对象(用于操作数据库)
cursor = conn.cursor()
# 选择要操作的数据库
conn.select_db("db_study_system")
# 使用游标对象,执行建表sql语句
cursor.execute("CREATE TABLE student(id int,name VARCHAR(64),age int,score int)")
3.9.3 单条插入SQL
python
"""
单条插入SQL
"""
# 获取游标对象(用于操作数据库)
cursor = conn.cursor()
# 选择要操作的数据库
conn.select_db("db_study_system")
cursor.execute("insert into student values(6,'张三',18,99)")
conn.commit();
3.9.4 批量插入
批量插入使用executemany方法,values定义使用[()]或[[]]
python
"""
批量插入SQL
"""
# 获取游标对象(用于操作数据库)
cursor = conn.cursor()
# 选择要操作的数据库
conn.select_db("db_study_system")
# 使用游标对象,执行sql语句
sql = "insert into student(id,name,age,score) values(%s,%s,%s,%s)";
values=[(4,'张三',18,99),(5,'张三',18,99)];
cursor.executemany(sql,values)
# 提交事务
conn.commit();
3.9.5 查询SQL
python
"""
查询SQL
"""
# 获取游标对象(用于操作数据库)
cursor = conn.cursor()
# 选择要操作的数据库
conn.select_db("db_study_system")
# 使用游标对象,执行sql语句
cursor.execute("SELECT * FROM student where name ='张三'")
# 获取查询结果,返回元组对象
results: tuple = cursor.fetchall()
for result in results:
print(result)
3.9.6 更新SQL
python
"""
更新SQL
"""
# 获取游标对象(用于操作数据库)
cursor = conn.cursor()
# 选择要操作的数据库
conn.select_db("db_study_system")
# 使用游标对象,执行sql语句
cursor.execute("UPDATE student set name ='李四' where id = 4")
conn.commit();
3.9.7 删除SQL
python
"""
删除SQL
"""
# 获取游标对象(用于操作数据库)
cursor = conn.cursor()
# 选择要操作的数据库
conn.select_db("db_study_system")
# 使用游标对象,执行sql语句
cursor.execute("DELETE FROM student where id IS NULL")
conn.commit();
3.10 操作mongodb
pymongo的安装
使用pip安装:pip install pymongo
3.10.1 操作步骤
导包->建立连接->执行操作->关闭连接:
python
import pymongo
MONGO_URL_BSS = "mongodb://root:123456@10.100.56.51:27019/study?authSource=admin"
#数据库
BSS_DATABASE = "study"
CLIENT = pymongo.MongoClient(MONGO_URL_BSS)
db = CLIENT.get_database(BSS_DATABASE);
collection = db.get_collection("Student");
#执行操作
print(collection.find_one({"name": name}));
CLIENT.close();
3.10.2 增删改查
python
import pymongo
MONGO_URL_BSS = "mongodb://root:123456@10.100.56.51:27019/study?authSource=admin"
#数据库
BSS_DATABASE = "study"
CLIENT = pymongo.MongoClient(MONGO_URL_BSS)
db = CLIENT.get_database(BSS_DATABASE);
collection = db.get_collection("Student");
def getStudent(name):
object = collection.find_one({"name": name});
return object;
def updateStudent(name,address):
query = {"name": name}
update = {"$set": {"address": address}}
collection.update_one(query,update);
return;
def deleteStudent(name):
query = {"name": name}
collection.delete_one(query);
return;
def addStudent(student):
collection.insert_one(student);
if __name__ == '__main__':
print(getStudent('zhangsan1'))
updateStudent('zhangsan1','苏州')
print(getStudent('zhangsan1'))
student={'name': 'zhangsan111', 'age': 4, 'address': '西安', 'books': [{'name': '人性的缺点', 'author': '卡耐基'}]};
addStudent(student);
print(getStudent('zhangsan111'))
deleteStudent('zhangsan111');
print(getStudent('zhangsan111'))
CLIENT.close();
3.11 发送http请求
requests模块为python的第三方库,主要用于处理HTTP
安装requests模块
pip install requests
3.11.1 发送post请求 json格式
python
def request_post():
headers = {
'Content-Type': 'application/json',
'access_token':'TGT-101787-I5XN9XvVwIrbaPPoJbcVhKYarNJTH034GrXhom6DpZB3jPJhWb'
}
data = {
"goodsId":"6596da7a7dd3a945ebdc057d","streamNo":"web_saas1704423400890818242","partnerCode":"UKSAS"
}
url = "url"
resp = requests.post(url, headers=headers, json=data,timeout=(10,10))
print(resp.content)
return resp;
3.11.2 发送post请求 form-data格式
python
def request_post2():
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'access_token':'TGT-101787-I5XN9XvVwIrbaPPoJbcVhKYarNJTH034GrXhom6DpZB3jPJhWb'
}
data = {
"id":"5a6afd864d9b23696f7c3cd3","streamNo":"web_saas1704423400890818242"
}
url = "url"
resp = requests.post(url, headers=headers, data=data,timeout=(10,10))
print(resp.content)
return resp;
3.11.2 发送get请求
python
def request_post3():
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'access_token':'TGT-101787-I5XN9XvVwIrbaPPoJbcVhKYarNJTH034GrXhom6DpZB3jPJhWb'
}
url = "url"
resp = requests.get(url, headers=headers, timeout=(10,10))
print(resp.content)
return resp;