背景:最近有个小需求,需要爬取某个网站的内容放到数据库,方便其他地方查看使用。所以利用这个时机也学习一下
Python
对数据库的一些操作
从文档可以了解到,Python
的 DB-API
已经为大多数数据库实现了接口。大致流程跟其他语言没啥区别
- 引入
API
模块 - 连接数据库
- 执行
SQL
语句 - 关闭数据连接
这里,我使用 Mysql
,所以我们需要用到 Python
的 MySQLdb
模块
安装 MySQLdb
模块
我用的是 win10,python 3.7
到 https://www.lfd.uci.edu/~gohlke/pythonlibs/ ,下载对应系统的版本的 whl 文件,下载完毕之后,到 whl 所在目录执行:pip install mysqlclient-1.4.2-cp37-cp37m-win32.whl
1 | pip install mysqlclient-1.4.2-cp37-cp37m-win32.whl |
这样就算安装成功了
插入数据
一切都准备就绪,那就可以到代码来了,废话不多说直接上代码
1 | import requests |
这里我爬取的是一个古诗文的内容,可以看到执行插入的时候我用的 executemany
,而不是 execute
,这样可以同时插入多条,提高性能
问题
问题1
端口问题
代码:
1 | db = MySQLdb.connect(host="127.0.0.1", port='3306', user='root', password='root', db='bl') |
出现以下代码:
1 | Traceback (most recent call last): |
查看源码之后:
port
是要 int
类型的。好严格啊
所以端口号改成 int
类型,解决
1 | db = MySQLdb.connect(host="127.0.0.1", port=3306, user='root', password='root', db='bl') |
问题2
插入数据,数据库编码跟数据源编码不一样报错
报错信息
1 | latin-1' codec can't encode characters in position 0-4: ordinal not in range(256) |
解决
在连接数据库的时候,先声明编码格式
1 | db = MySQLdb.connect(host="127.0.0.1", port=3306, user='root', |