一、Python DB API
在没有Python DB API之前:
有Python DB API之后:
Python DB API包含内容
Python DB API访问数据库流程
二、Python Mysql开发环境
三、Python 数据库编程实例
数据库连接对象connection
连接对象:建立Python客户端与数据库的网络连接
创建方法:MySQLdb.Connect(参数)
参数名 | 类型 | 说明 |
host | 字符串 | MySQL服务器地址 |
port | 数字 | MySQL服务器端口号 |
user | 字符串 | 用户名 |
passwd | 字符串 | 密码 |
db | 字符串 | 数据库名 |
charset | 字符串 | 连接编码 |
3.1 connection对象支持的方法
方法名 | 说明 |
cursor() | 使用该连接创建并返回游标 |
commit() | 提交当前事物 |
rollback() | 回滚当前事物 |
close() | 关闭连接 |
3.2 cursor对象支持的方法
方法名 | 说明 |
execute(op[,args]) | 执行一个数据库查询命令(select、insert、delete) |
fetchone() | 取得结果集里的下一行 |
fetchmanv(size) | 获得结果集里的下几行 |
fetchall() | 获得结果集里剩下的所有行 |
rowcount() | 最近一次execute返回数据的行数或影响行数 |
close() | 关闭 |
3.3 实例
示例一:
import pymysql#python3 用 pymysql,python2 用MySQLdb
conn = pymysql.connect(
host = '127.0.0.1',
port = 3306,
user = 'root',
passwd = 'root',
)
cus = conn.cursor()#连接数据库
sql = 'select version()'
cus.execute(sql)#执行sql语句
print(cus.fetchone())
cus.close()#关闭
conn.close()
示例二:
爬取i春秋的课程名并保存在数据库中
# coding=utf-8
import requests
import json
import pymysql#python3 用 pymysql,python2 用MySQLdb
payload_start = 'courseTag=&courseDiffcuty=1&IsExp=&producerId=&orderField=&orderDirection=&pageIndex='
def lesson(payload):
url='https://www.ichunqiu.com/courses/ajaxCourses'
#payload = 'courseTag=&courseDiffcuty=1&IsExp=&producerId=&orderField=&orderDirection=&pageIndex='
#复制浏览器的UA,默认的UA属于爬虫UA被waf拦截
headers = {
'Cookie': 'ci_session=ea12fe98d0b99f9cfc7de37d51e34805ec566686; chkphone=acWxNpxhQpDiAchhNuSnEqyiQuDIO0O0O; __jsluid_s=e09df2c83e087903c72b4d33caca7c93; Hm_lvt_2d0601bd28de7d49818249cf35d95943=1662127088; Hm_lpvt_2d0601bd28de7d49818249cf35d95943=1662128935',
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0',
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding': 'gzip, deflate',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'X-Requested-With': 'XMLHttpRequest',
'Content-Length': '103',
'Origin': 'https://www.ichunqiu.com',
'Referer': 'https://www.ichunqiu.com/courses/nandu-chu',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'Te': 'trailers',
}
r = requests.post(url,headers=headers,data=payload)
data = json.loads(r.text)
name_long = int(data['course']['perPageSize'])#每页有多少个课程名称
#name_long = len(data['course']['result'])#方法1:json文件中course里面的有多少个result
#print(name_long)
#print(data['course']['result'][0]['courseName'])#读取json文件中course里面的result中的第一个courseName
for i in range(name_long):
#print(data['course']['result'][i]['courseName'],data['course']['result'][i]['producerName'])
sql = "insert into lessons (lesson_name,lesson_own) values('%s','%s')"%(data['course']['result'][i]['courseName'],data['course']['result'][i]['producerName'])
cus.execute(sql)#执行sql语句
conn = pymysql.connect(
host = '127.0.0.1',
port = 3306,
user = 'root',
passwd = 'root',
db = 'ichunqiu',
)
cus = conn.cursor()#连接数据库
#使用for循环读取到8页课程名称
for i in range(1,9):#共12页的课程
payload =payload_start+str(i)+'&tagType=&isOpen='
lesson(payload)
cus.close()#关闭
conn.close()