爬虫与Python:(四)爬虫进阶二之数据存储(数据库存储)——5.MySQL存储

当数据量大,并且需要使用数据进行后期操作时,需要用到数据库。下面讲解在Python中使用MySQL 存储。

MySQL 数据库安装

详见官方文档或:https://www.cnblogs.com/luyj00436/p/15476678.html

MySQL 数据驱动安装

mysql-connector是MySQL 官方提供的驱动器,使用它可以连接MySQL .用户可以使用pip命令来安装mysql-connector。

python -m pip install mysql-connector

运行以下代码测试mysql-connector是否安装成功,如果没有产生错误,则表示安装成功。

import mysql.connector

1. 创建数据库连接

要操作数据库,首先要获取数据库连接。使用mysql-connector获取到MySQL数据库连接示例代码如下:

 1 import mysql.connector
 2 
 3 # 连接数据库
 4 mydb = mysql.connector.connect(
 5     host="localhost",   # 数据库主机地址
 6     user="root",        # 数据库用户名
 7     passwd="123456",    # 数据库密码
 8     database="test_db", # 连接数据库名称
 9 )
10 print(mydb)

2. 插入数据

接下来,我们需要插入数据。假设数据库中已存在一张名为"test_01"的表,并且包含id、name和age这3个字段,在其中插入一条测试数据。

 1 import mysql.connector
 2 
 3 # 插入测试数据
 4 mydb = mysql.connector.connect(
 5     host="localhost",   # 数据库主机地址
 6     user="root",        # 数据库用户名
 7     passwd="123456",    # 数据库密码
 8     database="test_db", # 连接数据库名称
 9 )
10 mycursor = mydb.cursor()
11 
12 sql = "INSERT INTO test_01(id,name,age) VALUES(%s,%s,%s)"
13 val = (1,"张三",23)
14 mycursor.execute(sql ,val)
15 mydb.commit() # 提交事务。数据表内容已经有更新,必须用到该语句。
16 print(mycursor.rowcount,"记录插入成功")

通过数据库客户端连接连接工具观察,发现已经插入了数据。

3. 批量插入

在实际开发中,往往爬虫每次获取到的数据都是几十条或上百条,所以这时如果向数据库中插入数据或涉及批量插入的问题——即只连接数据库一次,然后循环执行,知道完成所有插入语句再调用commit方法提交。这样做可以节省数据库开销和提升插入熟读,其示例代码如下。

 1 import mysql.connector
 2 
 3 mydb = mysql.connector.connect(
 4     host="localhost",
 5     user="root",
 6     passwd="123456",
 7     database="test_db",
 8 )
 9 mycursor = mydb.cursor()
10 
11 sql = "INSERT INTO test_01(id,name,age) VALUES(%s,%s,%s)"
12 val = [
13     (2,"张三",12),
14     (3,"李四",12),
15     (4,"王五",12),
16     (5,"赵六",12),
17 ]
18 mycursor.executemany(sql ,val)
19 mydb.commit() # 提交事务。数据表内容已经有更新,必须用到该语句。
20 print(mycursor.rowcount,"记录插入成功")

运行以上代码后,就会发现数据库中已经成功地插入了4条记录。

4. 查询数据

使用最频繁的还是查询。在以下查询示例中,执行fetchall()方法来获取所有返回结果。

 1 import mysql.connector
 2 
 3 # 查询数据
 4 mydb = mysql.connector.connect(
 5     host="localhost",
 6     user="root",
 7     passwd="123456",
 8     database="test_db",
 9 )
10 mycursor = mydb.cursor()
11 
12 sql = "SELECT * FROM test_01"
13 mycursor.execute(sql )
14 myresult = mycursor.fetchall()  # fetchall()获取所有记录
15 
16 for x in myresult:
17     print(x)

运行后控制台输出返回结果:

5. 更新数据库

调用更新数据与插入数据的方法是一样的,只是sql语句不同而已。例如,下面的示例更新“test_01”表id为1的数据。

 1 import mysql.connector
 2 
 3 # 更新数据
 4 mydb = mysql.connector.connect(
 5     host="localhost",
 6     user="root",
 7     passwd="123456",
 8     database="test_db",
 9 )
10 mycursor = mydb.cursor()
11 
12 sql = "UPDATE test_01 SET name='测试' WHERE id = 1"
13 mycursor.execute(sql)
14 mydb.commit()
15 
16 print(mycursor.rowcount ,"条记录被修改")

运行以上代码后,发现数据库中数据已经成功修改。

除了使用mysql-connector库连接操作MySQL数据库外,还可以使用PyMySQL库。该库使用方法mysql-connect类似,同样也可以通过pip命令安装。命令为 pip3 install PyMySQL

posted @ 2021-11-05 18:07  陆陆无为而治者  阅读(147)  评论(0编辑  收藏  举报