解析完爬取下来的数据之后的下一个步骤就是如何高效地储存爬取下来的数据,本文主要利用mySQL数据库来储存数据,所以这涉及到如何使用python连接mySQL数据库
- 连接数据库
1.pyton连接数据库需要先安装pymysql模块:pip install pymysql
2.安装完成后导入pymysql模块:import pymysql
之后python连接数据库主要分五个步骤:
1.连接数据库
2.创建游标对象 //主要是为了用来给数据库发送sql语句, 并执行的.
3.对数据库进行增删改查
4.关闭游标
5.关闭连接
代码如下:
import pymysql
if __name__ == '__main__':
db = pymysql.connect(host='localhost', user='root', password='nyq20010324', db='test000', port=3306)
cursor=db.cursor()
cursor.execute('SELECT VERSION()')
data = cursor.fetchone()
print("版本号",data)
db.close
成功输出则连接成功
在connect方法里面用到的几个参数介绍:
host: 取决于连接本地还是连接远程数据库,本地直接localhost;
user:数据库用户名,一般是root
password:‘你自己的密码’
db:数据库名字
port:端口号,一般默认是3306
如果不知道自己数据库的用户名或者端口号,可以通过一下操作查找:
打开cmd
输入mysql -u root -p
然后系统提示输入密码
输入SELECT user,host from mysql.user; 可以查询用户名和host
输入show global variables like ‘port’; 可以查询端口号
- 创建表
sql1='''
create table if not exists person
(
id int,
name varchar(30),
age int,
sex char(2)
);
''' #创建新的数据表
c.execute(sql1)
创建表这边不用commit()方法就可以执行,用cmd就可以看到创建的表了
但是对于增加,删除,修改这类会改变数据库中数据的操作,都需要调用commit方法才会生效。更好的操作是在外层添加一层异常处理,如果操作执行失败了,会调用rollback()函数执行数据回滚,相当于无事发生
- 插入数据
同样需要用到游标执行sql语句,然后最重要的是需要调用commit方法让他能够在数据库里实现更新
c.execute("insert into person (id,name,age,sex) values (1,'小明',15,'男')")
db.commit()
同样可以用select查看该表
- 删除表中的某一列
伪代码:
Delete From 表名称 Where 列名称=值
例子
sql='''
delete from person where name="xiaom";
'''
c.execute(sql)
db.commit()
- 删除表,数据库
DROP DATABASE [IF EXISTS] 数据库名;
例如:删除school数据库
IF EXISTS 为可选,判断是否存在,如果不存在则会抛出异常
删除数据表
DROP TABLE [IF EXISTS] 表名;
例如:删除student表
注意:删除具有主外键关系的表时,要先删子表(从表),后删主表
- 修改操作
伪代码:
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
实例:
sql='''
update person set age =20 where age=15;
'''
c.execute(sql)
db.commit()
- 查看数据
伪代码:
SELECT 列名称 FROM 表名称
查看数据这里就涉及到另外两个方法:
fetchone()和fetchall()方法,两个方法都可以从刚刚游标查找到的数据返回出来
-
fetchone() :
返回单个的元组,也就是一条记录(row),如果没有结果 , 则返回 None -
fetchall()
返回多个元组,即返回多条记录(rows),如果没有结果,则返回 ()
注意:在MySQL中是null,而在Python中则是None
①查询出有多条数据时:
cursor.fetchone():将只取最上面的第一条结果,返回单个元组如(‘id’,‘name’),然后多次循环使用cursor.fetchone(),依次取得下一条结果,直到为空。
cursor.fetchall() :将返回所有结果,返回二维元组,如((‘id’,‘name’),(‘id’,‘name’)),
②查询只有一条数据时:
cursor.fetchone():将只返回一条结果,返回单个元组如(‘id’,‘name’)。
cursor.fetchall() :也将返回所有结果,返回二维元组,如((‘id’,‘name’),),
代码实例:
sql='''
select * from person ;
'''
c.execute(sql)
print(c.rowcount) #查看拿到的数据的行数
row=c.fetchone()
while row:
print(row)
row=c.fetchone()
运行结果:
- 在sql语句中插入python的变量方法:
示例:
def insert(c,id,name,age,sex):
sql='''
insert into person (id,name,age,sex) values ({id},{name},{age},{sex})
'''.format(id=id,name=name,age=age,sex=sex)
c.execute(sql)
利用format方法,把变量带进去