一:前言 类已更新 见第二篇
写脚本的时候首先就看自己想实现什么功能,也就是老师昨天分享的程序猿的逻辑,有了需求就对需求进行拆解细化,过程中会把零散的知识点给整合起来,比如函数传参数,传递什么数据类型的参数,%s 格式化输出,对类的理解(实例化,成员变量,成员函数等),对数据库的连接操作等。
二:实现功能
爬虫的数据经常要存入数据库,每次存库的时候都需要指定表名和字段名,类似下面这样,一个是造成代码冗余,一个是格式化传递多个字段的时候容易出错(%s,%s...)
insert into 表名 values (字段1,字段2,字段3)
小例实现传递表名和数据列表参数 实现数据的动态传递 封装类
三:实现过程拆解 先不封装类
①数据类型
首先,插入数据的时候需要传递表名字,字符串类型,传入的数据是以元组类型传递,而爬虫我多数是用列表存储数据,因而数据这个参数数据类型是列表,每个元素是元组。
②建表
先建表 表名test,2个字段 id,id2 整型
create table test(
id int(11),
id2 int(11)
)engine=innodb default charset=utf8
③代码实现
import MySQLdb
def get_data():
data_list = []
for i in range(10):
id = i
id2 = i+1
data_list.append((id, id2))
return data_list
#传递两个参数
def insert(table_name,data_list=[]):
print data_list
for data in data_list:
conn = MySQLdb.connect(
host='localhost',
user='root',
passwd='密码',
db='local_db',
port=3306,
charset='utf8'
)
with conn:
cursor = conn.cursor()
sql='insert into %s values %s' % (table_name,data)
print sql
cursor.execute(sql)
conn.commit()
if __name__ == '__main__':
#调用get_data函数 获取存储元组数据的列表data_list 并作为insert函数的第二个参数
data_list=get_data()
# 两个参数 一个表名 字符串类型 一个列表 上一步获取的
insert('test',data_list)
四:封装成类
#coding:utf-8
import MySQLdb
def get_data():
data_list = []
for i in range(10):
id = i
id2 =i+1
data_list.append((id, id2))
return data_list
class Mysql():
#绑定2个参数 实例化的时候传递值 实例化的对象就有这两个属性了
def __init__(self,table_name,data_list=[]):
self.table_name=table_name
self.data_list=data_list
#成员函数 Mysql实例化以后 就有了insert()方法
def insert(self):
print self.data_list
#对列表进行遍历 取出元组数据data
for data in self.data_list:
conn = MySQLdb.connect(
host='localhost',
user='root',
passwd='密码',
db='local_db',
port=3306,
charset='utf8'
)
with conn:
cursor = conn.cursor()
# 实例化时候传递的第一个参数就是self.table_name data是self.data_list的元素
#注意sql拼接的时候像下面这样拼接 以字符串格式化传递
sql='insert into %s values %s' % (self.table_name,data)
print sql
#再执行上面的sql变量
cursor.execute(sql )
conn.commit()
if __name__ == '__main__':
data_list=get_data()
#实例化传递 两个参数 表名 数据list列表
mysql=Mysql('test',data_list)
#实例化以后 mysql对象有了2个属性 table_name 和data_list
print mysql.table_name,mysql.data_list
#实例化以后有了insert方法 并将对象的2个属性传递到这个函数里
mysql.insert()
五:总结
看作业,有同学说对类很害怕,教程能看懂,实际操作时候就怕了,像列表 字典 这本身就是一个类,append方法经常用呢 我们定义一个列表 就是列表实例化的过程 自动拥有了列表类下面的方法。多写代码就熟悉。
![](https://img.haomeiwen.com/i3888998/184aaec98bd6eed5.png)
![](https://img.haomeiwen.com/i3888998/3362c04185f7e2a3.png)
网友评论