看完这篇文章后,你将会对云数据库有更深的理解:

  • ​​1.如何将数据库迁移上云?用什么工具?​​
  • ​​2.怎么抓取云数据库上的数据?​​
  • 写给大忙人看的数据库迁移上云与爬取云数据库实例(MySQL)_云数据库


1.如何将数据库迁移上云?用什么工具?

前几天我在逛华为云时,发现在做活动,于是我就索性买了一个试试:

写给大忙人看的数据库迁移上云与爬取云数据库实例(MySQL)_数据库_02


那么,什么是云数据库呢?

云数据库(Relational DatabaseService,简称RDS)是一种基于云计算平台的可即开即用、稳定可靠、弹性伸缩、便捷管理的在线关系型数据库服务。RDS具有完善的性能监控体系和多重安全防护措施,并提供专业的数据库管理平台。

与传统服务器相比,云数据库不需要我们购买昂贵的硬件设施,我们按需使用就行,于此同时也能减少很多人力成本,可以说是"居家必备之良品了!"

这里我在本地事先准备好数据,进入云数据库直接导入即可:

写给大忙人看的数据库迁移上云与爬取云数据库实例(MySQL)_数据库_03


速度很快,两万多行的数据,一眨眼的功夫就搞定了:

写给大忙人看的数据库迁移上云与爬取云数据库实例(MySQL)_数据库_04


刚刚这个数据库上云的方式是非常的,不需要写什么代码 ,下面我们来试着用python代码导入数据,这里我选择了华为商城的数据:

写给大忙人看的数据库迁移上云与爬取云数据库实例(MySQL)_mysql_05


我们把手机名称和价格抓取下来,然后存到云数据库中。

这里先穿插一点爬虫小知识:

写给大忙人看的数据库迁移上云与爬取云数据库实例(MySQL)_大数据_06


找到我们想要的数据后,发现这里有三页:

写给大忙人看的数据库迁移上云与爬取云数据库实例(MySQL)_python_07


每一页的url地址都是不同的:

"https://openapi.vmall.com/mcp/queryPrd?lang=zh-CN&country=CN&portal=1&keyword=36&pageSize=20&pageNum=1&searchSortField=0&searchSortType=desc&searchFlag=1&brandType=0&tid=1243c72f71ac499fb47b82783b91130e&screenParams=%7B%7D&searchId=db9209766d62f08d1e53a62fdcf7e9134f7502aa3ed58a8f"
"https://openapi.vmall.com/mcp/queryPrd?lang=zh-CN&country=CN&portal=1&keyword=36&pageSize=20&pageNum=2&searchSortField=0&searchSortType=desc&searchFlag=1&brandType=0&tid=1243c72f71ac499fb47b82783b91130e&screenParams=%7B%7D&searchId=db9209766d62f08d1e53a62fdcf7e9134f7502aa3ed58a8f"
"https://openapi.vmall.com/mcp/queryPrd?lang=zh-CN&country=CN&portal=1&keyword=36&pageSize=20&pageNum=3&searchSortField=0&searchSortType=desc&searchFlag=1&brandType=0&tid=1243c72f71ac499fb47b82783b91130e&screenParams=%7B%7D&searchId=db9209766d62f08d1e53a62fdcf7e9134f7502aa3ed58a8f"

当然,这里页数比较少,完全可以把这三个url地址放在一个列表urls里,然后再循环取出:

urls = ["https://openapi.vmall.com/mcp/queryPrd?lang=zh-CN&country=CN&portal=1&keyword=36&pageSize=20&pageNum=1&searchSortField=0&searchSortType=desc&searchFlag=1&brandType=0&tid=1243c72f71ac499fb47b82783b91130e&screenParams=%7B%7D&searchId=db9209766d62f08d1e53a62fdcf7e9134f7502aa3ed58a8f",
"https://openapi.vmall.com/mcp/queryPrd?lang=zh-CN&country=CN&portal=1&keyword=36&pageSize=20&pageNum=2&searchSortField=0&searchSortType=desc&searchFlag=1&brandType=0&tid=1243c72f71ac499fb47b82783b91130e&screenParams=%7B%7D&searchId=db9209766d62f08d1e53a62fdcf7e9134f7502aa3ed58a8f",
"https://openapi.vmall.com/mcp/queryPrd?lang=zh-CN&country=CN&portal=1&keyword=36&pageSize=20&pageNum=3&searchSortField=0&searchSortType=desc&searchFlag=1&brandType=0&tid=1243c72f71ac499fb47b82783b91130e&screenParams=%7B%7D&searchId=db9209766d62f08d1e53a62fdcf7e9134f7502aa3ed58a8f"]
for url in urls:
text = requests.get(url)

有没有更好的方法?当然有!

仔细观察这三个url地址有什么不同:

写给大忙人看的数据库迁移上云与爬取云数据库实例(MySQL)_云数据库_08


可以推测出来,这里的数字就是第几页的意思,这样一来,我们使用一个url地址就可以解决问题了:

for item in range(1,4):
# 获取华为商城源代码
urls = "https://openapi.vmall.com/mcp/queryPrd?lang=zh-CN&country=CN&portal=1&keyword=36&pageSize=20&pageNum={}&searchSortField=0&searchSortType=desc&searchFlag=1&brandType=0&tid=1243c72f71ac499fb47b82783b91130e&screenParams=%7B%7D&searchId=db9209766d62f08d1e53a62fdcf7e9134f7502aa3ed58a8f".format(item)

用一个花括号 {} 替换url地址里的数字,再在最后面加上 .format(item) ,虽然这样仍然需要循环,但是整个代码结构就显得比较清爽!

下面我们在云数据库里建库建表:

CREATE DATABASE vmall;
CREATE TABLE `vmall`.`vmall_product` (
`id` int(50) AUTO_INCREMENT NOT NULL,
`product_name` varchar(50) NULL,
`product_price` varchar(50) NULL,
PRIMARY KEY(`id`)
) DEFAULT CHARACTER SET = utf8,
COLLATE = utf8_general_ci,
ENGINE = InnoDB;

写给大忙人看的数据库迁移上云与爬取云数据库实例(MySQL)_云数据库_09


建好表以后我们来"select * from vmall_product":

写给大忙人看的数据库迁移上云与爬取云数据库实例(MySQL)_mysql_10

在本地测试一下连接云数据库:

写给大忙人看的数据库迁移上云与爬取云数据库实例(MySQL)_mysql_11


成功!下面我们把数据保存到云数据库即可:

import requests
import pymysql

product_name = []
product_price = []
# 连接到云数据库
connection = pymysql.connect(host='',
port=,
user='',
password='',
db='vmall',
charset='utf8',
cursorclass=pymysql.cursors.DictCursor)
cursor = connection.cursor()
print("已连接至云数据库!")


for item in range(1,4):
# 获取华为商城源代码
urls = "https://openapi.vmall.com/mcp/queryPrd?lang=zh-CN&country=CN&portal=1&keyword=36&pageSize=20&pageNum={}&searchSortField=0&searchSortType=desc&searchFlag=1&brandType=0&tid=1243c72f71ac499fb47b82783b91130e&screenParams=%7B%7D&searchId=db9209766d62f08d1e53a62fdcf7e9134f7502aa3ed58a8f".format(item)
text = requests.get(urls).json()
labelList = text["resultList"]

for i in range(len(labelList)):
name = labelList[i]['briefName']
price = labelList[i]['price']
product_name.append(name)
product_price.append(price)
sql = 'insert into vmall_product(product_name,product_price)VALUES(%s,%s)'
cursor.execute(sql,(name,price))
connection.commit()
connection.close()
print(product_name)
print(product_price)
print("商品总数为:",len(product_name))

写给大忙人看的数据库迁移上云与爬取云数据库实例(MySQL)_数据库_12


在云服务器"select * from vmall_product":

写给大忙人看的数据库迁移上云与爬取云数据库实例(MySQL)_mysql_13

2.怎么抓取云数据库上的数据?

抓取云数据库上的数据也可以说成"出云",我爬取的是我自己的云数据库

在开始之前先把全部源地址放通:

写给大忙人看的数据库迁移上云与爬取云数据库实例(MySQL)_大数据_14


(当然,正式使用云服务器时最好不要这样做!)

下面我们还是先连接云数据库:

import pymysql

class RDS(object):

def __init__(self):
# 连接到云数据库
self.connection = pymysql.connect(host='',
port=,
user='',
password='',
db='bankinfo',
charset='utf8',
cursorclass=pymysql.cursors.DictCursor)
self.cursor = self.connection.cursor()
print("已连接至云数据库!")

这里和host,port,user和password还有db都要换成自己的云数据库信息

换句话说,如果别人知道了你的数据库信息,那么你的数据库就有被攻击的风险

下面是获取bankinfo表里所有数据的代码:

def get_all_data(self):
sql = 'SELECT * FROM bank'
try:
self.cursor.execute(sql)
for item in self.cursor.fetchall():
print(item)
except Exception as e:
print(e)
self.connection.close()

写给大忙人看的数据库迁移上云与爬取云数据库实例(MySQL)_数据库_15


2万多条数据一下子就来了

写在最后

这个时代,唯一不变的是变化

it’s never too late,and you are never too old to learn

学习是永无止境的,对于一位与时俱进的developer来说,更是如此。

写给大忙人看的数据库迁移上云与爬取云数据库实例(MySQL)_大数据_16