Python笔记06
python操作数据库
1.python中的两个对象
1.连接对象 connection
作用:创建一个python程序到数据库的 连接通道 和jdbc连接是一个道理
方法:
cursor 创建游标
commit 提交事务
rollback 事务回滚
参数:
1.mysql服务器地址 IP
2.端口号 port 3306
用户名 user root
密码 password root
数据库 database test
字符集 charset
2.游标对象 cursor
是操作数据库的一个指针,类似于 在高速路上的大货车,从起点 建立连接到终点 关闭连接
常用方法:
execute(sql) 执行sql命令的一个方法
fetchone 取出结果集的下一行
fetchmany(size) 取出结果集的下几行
fechall 获取结果集的所有行
rowcount 最近一次执行execute 返回结果集的行数或者影响的行数
close 关闭
操作 sqlite 流程
sqlite操作流程:
1.导入模块sqlite import sqlite3
2.创建连接对象connection conn = sqlite3.connect('mrsoft.db')
3.创建游标对象cursor cursor = conn.cursor()
4.执行sql语句 cursor.execute('create table user(id int(10), primary key name varchar(20))')
5.关闭游标对象 cursor.close()
6.关闭连接对象 conn.close()
5.操作mysql数据库
a.安装mysql数据库
b.配置环境变量
c.开启服务连接测试
d.使用Navicat连接mysql
e.使用pip命令安装pymysql模块
连接数据库的流程:
# 导入模块pymysql
import pymysql
# 打开数据库,参数1:主机名域IP 参数2:用户名 参数3:密码 参数4:数据库名称
db = pymysql.connect('localhost', 'root', 'root', 'stuypython')
# 使用cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用execute() 方法执行sql查询
cursor.execute('SELECT VARSION()') # 如果表存在删除表 'DROP TABLE IF EXISTS 表名'
# 使用fetchone() 方法取单条数据
data = cursor.fetchone()
print('Database version : %s' % data)
# 关闭游标
cursor.close()
# 关闭数据库连接
db.close()
创建表
import pymysql
db = pymysql.connect('localhost', 'root', 'root', 'mrsoft')
cursor = db.cursor()
# 如果表存在删除表
cursor.execute('DROP TABLE IF EXISTS books')
print('books已删除')
sql = '''
create table books(
id int(8) primary key,
name varchar(20) not null,
category varchar(20) not null,
price decimal(10, 2),
publish_time date
)
'''
cursor.execute(sql)
cursor.close()
db.close()
插入数据
import pymysql
db = pymysql.connect('localhost', 'root', 'root', 'mrsoft')
cursor = db.cursor()
data = [
('零基础学Python', 'Python', '79.80', '2018-5-20'),
('python从入门到精髓', 'Python', '69.80', '2018-6-18'),
('零基础学PHP', 'PHP', '65.80', '2017-5-21'),
('PHP项目开发实战入门', 'PHP', '79.80', '2016-5-1'),
('零基础学Java', 'Java', '69.80', '2017-5-21'),
]
try:
# 执行sql语句插入多条数据
cursor.executemany('''insert into books(name, category, price, publish_time)
values (%s, %s, %s, %s)''', data)
print('数据插入成功,请查看')
# 提交数据
db.commit()
except:
# 发生错误时回来
db.rollback()
cursor.close()
db.close()
查询数据
import pymysql
db = pymysql.connect('localhost', 'root', 'root', 'shop')
cursor = db.cursor()
sql = '''SELECT * FROM books'''
try:
cursor.execute(sql)
results = cursor.fetchall()
for i in results:
user_id = i[0]
name = i[1]
category = i[2]
price = i[3]
publish_time = i[4]
print('user_id=%s\tname=%s\tcategory=%s\tprice=%s\tpublish_time=%s'
'' % (user_id, name, category, price, publish_time))
except Exception:
print('查询出错')
cursor.close()
db.close()
删除数据
import pymysql
db = pymysql.connect('localhost', 'root', 'root', 'shop')
cursor = db.cursor()
sql = "DELETE FROM books WHERE id > '%d'" % 4
try:
cursor.execute(sql)
db.commit()
print("delete OK")
except:
db.rollback()
cursor.close()
db.close()
修改数据
import pymysql
db = pymysql.connect("localhost", "root", "root", "shop" )
cursor = db.cursor()
sql = "UPDATE books SET name = 'PHP项目开发实战入门' WHERE id = '%c'" % '1'
try:
cursor.execute(sql)
db.commit()
print("update OK")
except:
db.rollback()
cursor.close()
db.close()
爬虫
1.什么是网络爬虫
概括:实现按照一定的算法,自动浏览获取网页中的信息,Java php C语言 C++也可以编写爬虫语言
用python的优势:1.快速开发
2.跨平台
3.解释性
4.多种网络爬虫框架
2.爬虫的3大模块
a.urllib
''' 使用爬虫获取到百度首页的页面信息代码如下 '''
# 导入模块
import urllib.request
# 调用urlopen函数, 获取百度的所有信息
respone = urllib.request.urlopen('http://www.baidu.com/')
# 读取信息并转码为utf-8格式
# 第一种
print(respone.read().decode('utf-8'))
# 第二种 print(str(respone.read(), encoding='utf-8'))
b.urllib3
# 导入模块
import urllib3
# 获取http对象
http = urllib3.PoolManager()
# 发送网络请求 get 或 post 输出的格式不一样
# response = http.request('get', 'http://www.baidu.com/', fields={'word': 'hello'})
response = http.request('POST', 'http://www.baidu.com/', fields={'word': 'hello'})
# 打印接受到的信息
print(response.data.decode('utf-8'))
c.requests(最常用)
# 导入 requests
import requests
# 请求参数
data = {'zhangsan': 'hello'}
# 发送网络请求 可以用 get 或 post
# response = requests.get('http://www.baidu.com')
response = requests.post('http://www.baidu.com', data=data)
# 打印相关信息
print('状态码:', response.status_code)
print('请求地址:', response.url)
print('头部信息:', response.headers)
print('cookies信息:', response.cookies)
print('文本信息:', response.text)
print('字节码源:', response.content)
3.请求 headers 的处理 作用:简单的避免403 (服务器反扒)
import requests
# 储存请求头信息
ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'
headers = {'User-Agent': ua}
# 发送网络的请求
respense = requests.get('http://www.whatismyip.com', headers=headers)
# 打印网站的信息
print(respense.content.decode('utf-8'))
4.网络超时
1.超时的原因
a.网络断开
b.网络不稳定
c.网络堵塞
d.网络过慢
案例:
import requests
from requests.exceptions import ReadTimeout, HTTPError, RequestException
# 循环访问50次百度
for i in range(50):
try:
# 网络请求
rsponse = requests.get('http://www.baidu.com/', timeout=0.05)
print('状态码: ', rsponse.status_code)
except ReadTimeout:
print('Timeout')
except HTTPError:
print('HTTPError')
except RequestException:
print('RequestException')
5.代理 (代理推荐网站:www.xicidaili.com)
import requests
proxy = {'HTTP': '183.167.217.152:63000',
'HTTPS': '222.95.144.185:3000'}
# 通过代理ip进行网络请求
response = requests.get('http://www.baidu.com', proxies=proxy)
# response = requests.get('https://www.baidu.com', proxies=proxy)
# 打印爬到的信息
print(response.content.decode('utf-8'))
6.HTML解析值Beautiful Soup
a.常用HTML解析模块
LXML模块
Requests-HTML模块
HtmlParser模块
b.安装命令
Linux: apt-get install Python-bs4
Windows: easy_install beautifulsoup4 或 pip install beautifulsoup4
安装 bs4 和 lxml
from bs4 import BeautifulSoup
import requests
ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'
headers = {'User-Agent': ua}
response = requests.get('https://www.baidu.com/', headers=headers)
text = response.content.decode('utf-8')
# 解析HTML信息
soup = BeautifulSoup(text, features='lxml')
# 打印信息
print(soup.prettify()) # prettify() 是格式化html格式
# 打印解析后的标题
print(soup.title)
网络编程
1.什么是网络编程
socket(套接字):他是一组接口,位于应用层和运输层之间的抽象层
应用程序通常通过‘套接字’向网络发送请求或者应答网络请求,使主机间啊或者一台计算机上的进程间可以通讯
起源于BSC Unix 一开始被用在同一台主机上多个应用程序之间通讯,这称为进程间通讯或IPC
套接字有两种(或称两个种族),分别基于文件型和网络型的
套接家族的名字:AF_UNIX 基于文件 unix一切皆文件,基于文件的套接字节用的就是底层的文件系统来读取数据,两个套接字进程进行在同一台机器,可以通过访问同一文件系统间接完成通信
AF_INET基于网络类型
语法:
socket.socket([family[,type[,proto]]])
family:套接字家族可以使AF-UNIX或者AF_INET
type:套接字类型可以根据是面向连接的还是非连接分为SOCK_STREAM或SOCK_DGRAM
protocol:一般不填默认为0
2.ip和端口号
IP地址:互联网协议地址,是一个32位的二进制数,通常被分割为4个人‘8位二进制数’;
IP地址通常用‘点分十进制’表示(a,b,c,d)的形式,其中a,b,c,d都是0~255之间的十进制整数
(记录每台电脑的标识)
端口:设备与外界通讯交流的出口 port音译
(记录应用程序的标识)
互联网的核心是由一堆协议组成,协议就是标准
3.os七层模型
参考网址:https://blog.csdn.net/qq_41923622/article/details/85805003
osi模型:
应用程序
表示层
会话层
传输层
网络层
数据链路层
物理层
TCP和UDP协议
TCP 可靠的、面向连接的协议
传输效率低全双工通信、面向字节流 应用:Web浏览器、电子邮件、文件传输程序
UDP 不可靠、无连接的服务
传输效率高(发送前时延小),一对一,一对多,多对一,多对多、面向报文,尽最大努力服务,无拥塞控制 应用:域名系统DNS,视频流,IP语音(VoIP)
服务器套接字
s.bind() 绑定地址(host,port)到套接字,在AF_INET,以元组的形式表示地址
s.listen()
s.accept()
客户端套接字
s.connect()连接服务器
s.connect_ex()
s.recv()
s.send()
Socket对象(内建)方法
s.sendall( ) 完整发送TCP数据。将string中的数据发送到连接的套接字,但在返回前会尝试发送所有数据,成功返回None失败抛出异常
s.makefile( ) 创建一个与套接字相关连的文件
语法:
客户端
创建socket对象
socket.socket()
绑定ip和端口号
socket.bind((host,port))
设置最大连接数
socket.listen(5)
循环中等待客户端连接
while True:
conn.addr = socket.accpet()
客户端
创建socket对象
socket.socket()
连接服务器
sockrt.connect((host,port))
公用方法
send(str)发送数据
recv(1024)接收数据
发送和接收时需要转码和解码(encode()和decode())
conn.close()
启动:
先启动服务器端
重复启动服务器端(会提示端口号被占用错误)
多任务:同一时间,多个任务同时执行
单核cpu 时间片轮询机制 一个2.8G hz的cpu 每秒大概要执行28亿次
python默认是单任务
主线程;程序被启动时,就有一个进程被创建,该线程被成为程序的主线程,在主程序运行时也可以手动创建子线程。
并行和并发
并发:任务的数量大于cpu核心数的时候就叫并发处理
并行:任务数量小于或等于cpu核心数就叫做并行
同步:多任务中,多个任务执行-有先后顺序,一个执行完毕后,另一个再执行
异步:多个任务中,多个任务执行没有先后循序,多个任务同时执行
线程锁机制:当线程获取资源后立刻进行锁定,资源使用完毕后再解锁,有效的保证同一时间只有一个线程在使用资源
当多个线程几乎同时修改某一个共享数据的时候,需要进行同步控制。
互斥锁为资源引入一个状态:锁定/非锁定
互斥锁保证了每次只有一个线程进行写入操作,从而保证了多线程情况下数据的正确性。
threading模块下的Lock类
3步: a.创建锁
mutex = threading.Lock()
b. 锁定
mutex.acquire()
c.释放
mutex.release()
互斥锁只有一把锁才能互斥
Python笔记06相关推荐
- python笔记06: 函数
函数 代码的一种组织形式 一个函数一般完成一项特定的功能 函数使用 函数需要先定义 使用函数,俗称调用 # 定义一个函数 # 只是定义的话不会执行 # 1. def关键字,后跟一个空格 # 2. 函数 ...
- python笔记-1(import导入、time/datetime/random/os/sys模块)
python笔记-6(import导入.time/datetime/random/os/sys模块) 一.了解模块导入的基本知识 此部分此处不展开细说import导入,仅写几个点目前的认知即可.其它内 ...
- opencv学习笔记06
原创:opencv学习笔记06 OpenCV-Python教程:50.理解k-近邻 https://www.jianshu.com/p/404e329e4e80 OpenCV里的kNN 1 2 3 4 ...
- Python笔记相关
Python 2021.9.9 Turtle官方文档 货币兑换 money=input("请输入货币符号($/¥)和金额:") while 1+1==2:if money[0] i ...
- tkinter 笔记: radiobutton 选择按钮(莫烦python笔记)
1 主体框架还是那个主体框架 window = tk.Tk() window.title('my window') window.geometry('500x500') 2 设置tkinter的文字变 ...
- tkinter 笔记:列表部件 listbox (莫烦python 笔记)
1 主体框架 主体框架部分还是 import tkinter as tkwindow = tk.Tk() #创建窗口window.title('my window') #窗口标题window.geo ...
- python笔记: 生成器
元素按照某种算法推算出来,我们在循环的过程中不断推算出后续的元素 不必创建完整的list,从而节省了大量的空间 这种一边循环一遍计算的机制,称之为生成器generator 1 列表生成器 把列表生成式 ...
- Spring-学习笔记06【spring_day02资料_dbutils】
Java后端 学习路线 笔记汇总表[黑马程序员] Spring-学习笔记01[Spring框架简介][day01] Spring-学习笔记02[程序间耦合] Spring-学习笔记03[Spring的 ...
- Spring-学习笔记06【Spring的新注解】
Java后端 学习路线 笔记汇总表[黑马程序员] Spring-学习笔记01[Spring框架简介][day01] Spring-学习笔记02[程序间耦合] Spring-学习笔记03[Spring的 ...
最新文章
- Linux应用集成MySQL数据库访问技巧
- DirectShow 在VS2005中环境配置
- [极客大挑战 2019]EasySQL
- 创建oracle方法,简单的Oracle存储过程的创建方法
- Spring学习总结(3)——Spring配置文件详解
- jQuery EasyUI/TopJUI实现数据表格的增删改查功能(不写js,纯HTML实现!!!)
- JVisualVM的使用教程
- [短线是银]条件选股公式集源码!
- 随机效应估算与固定效应估算_混合OLS模型、固定效应模型、随机效应模型的区别是什么...
- python共享单车数据分析_共享单车数据可视化分析(Python/Seaborn)
- 有关计算机知识的外文翻译,计算机专业外文翻译+原文-DBMS和MIS
- WebRTC学习实现视频
- python自动化办公 51cto_用Python开发钉钉群机器人,自动办公神器
- TimesTen 应用层数据库缓存学习:12. 管理缓存环境
- Android Studio 环信IM聊天设置用户头像
- linux 查看当前连接ip,netstat查看系统连接数及当前连接IP
- 连接跟踪TCP协议状态转换
- 【FPGA】时序逻辑电路——基于计数器实现一个以1秒频率闪烁的LED灯
- 【原创】婚前男女必看的一本好书 —— 《男人这东西》 BY:渡边淳一
- 致香港科技大学学生家长的公开信
热门文章
- sharding-JDBC源码分析(二)SQL解析
- 文献精讲-弱小目标检测-ADMD方法
- 永中“闹鬼”,天理不容
- Docker container 杀不掉 docker 死掉怎么办?
- html用css写彩虹,如何使用纯CSS实现彩虹条纹文字的效果(附代码)
- 低代码aPaaS复杂应用场景:HR必备的MBTI、九型人格、PDP等性格测试工具,尽在得帆云平台
- 文章姚笛甜蜜同游香港 两人婚外情曝光
- ifttt_选择IFTTT平台的7个技巧
- apicloud 地图、定位等汇总及心得
- mysql按周统计某维度指标(week与weekday)