一、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()




















