用pymysql操作本地MySQL数据库与用pymongo操作本地MongoDB数据库
前置知识
对于IP地址,大家并不陌生,特别是在网络访问中我们会经常使用到(平时对域名如百度的www.baidu.com
的访问,本质就是对域名所绑定的IP地址的访问),那么IP地址是什么呢?
首先,我们要知道网络中的相互访问其实就是在进行两者间的数据传递。就如同送快递一样,快递发出只有知道你的住址信息,才能将快递送到你的手中。而在网络访问时,只有知道你在网络中的地址信息,才能将数据发送到你的设备上。所以,IP地址就是你在网络中的地址信息。与你现实地址不同的是,你的现实地址使用文字表示,而你在网络中的地址(IP地址)是用二进制数字表示的。
一般我们会将网络划分公网(连Internet的)与内网。
公有IP地址
一般称公网中的IP地址为公有地址。公有地址由Inter NIC(因特网信息中心)负责,这些IP地址分配给注册并向Inter NIC提出申请的组织机构。公有地址是全球唯一的,公网中不可能存在两个相同的IP地址。
范围:除了私有地址以外的地址,都属于公有地址
私有IP地址
一般称内网(即局域网)中的IP地址为私有地址。私有地址是非注册地址,用于组织机构内部使用。私有地址的范围如下:
- A类IP地址中:10.0.0.0–10.255.255.255
- B类IP地址中:172.16.0.0–172.31.255.255
- C类IP地址中:192.168.0.0–192.168.255.255
私有地址与公有地址不同,并不是由Internet分配的,是不允许出现在Internet中的,我们在公网中是看不到私有IP地址的,并且公有地址也不会使用上述的三类地址。所以,私有地址是不能直接与Internet连接的。
而如果想用私有地址与Internet连接来访问公网,那该怎么做?这就需要将私有IP地址转换成公网IP地址,与外部连接。所以,我们平时使用的路由器中会装有一个叫做 NAT(网络地址转换) 的软件,我们的路由器中会至少会有一个有效的公网IP,NAT会将我们的私有地址转成路由器中的公网IP与外部Internet连接。而同样的,因为使用的是路由器中的公共的公网IP来连接Internet,所以这个内网中的PC在Internet中显示的都是路由器的公共IP,这样做不仅提供了一定程度的安全,也可以有效的减缓可用的IP地址空间的枯竭问题。(像我们学校或者公司的内网一般都是这么做的)
另外还有一点,在同一个局域网内,IP地址是唯一的;但是在不同的局域网内,IP地址是可以重复出现的。
举个小例子: 在局域网A中,有个主机的IP地址是
192.168.10.128
,那么绝不可能在局域网A中还有其他主机的IP地址为192.168.10.128
。但是在局域网B中却可以有主机的IP地址也是192.168.10.128
。
如果局域网A中的192.168.10.128
主机与局域网B中的192.168.10.128
主机通信,不会冲突吗?不会,因为上述说过,它们最终都是使用路由器中的公网IP
来连接外网的,而公网IP
是全球唯一的。
localhost、127.0.0.1和0.0.0.0和本机IP的区别
localhost
localhost其实是域名
,一般windows系统默认将localhost指向127.0.0.1
,但是localhost并不等于127.0.0.1
,localhost指向的IP地址是可以配置的
127.0.0.1
首先我们要先知道一个概念,凡是以127
开头的IP地址,都是回环地址(Loop back address),其所在的回环接口一般被理解为虚拟网卡,并不是真正的路由器接口。
所谓的回环地址,通俗的讲,就是我们在主机上发送给127
开头的IP地址的数据包会被发送的主机自己接收,根本传不出去,外部设备也无法通过回环地址访问到本机。
小说明:正常的
数据包
会从IP层
进入链路层
,然后发送到网络
上;而给回环地址
发送数据包
,数据包
会直接被发送主机的IP层
获取,后面就没有链路层
他们啥事了。
而127.0.0.1
作为{127}
集合中的一员,当然也是个回环地址。只不过127.0.0.1
经常被默认配置为localhost的IP地址。
一般会通过ping 127.0.0.1
来测试某台机器上的网络设备是否工作正常。
0.0.0.0
首先,0.0.0.0
是不能被ping
通的。在服务器中,0.0.0.0
并不是一个真实的的IP地址,它表示本机中所有的IPV4地址。监听0.0.0.0
的端口,就是监听本机中所有IP的端口。
本机IP
本机IP通常仅指在同一个局域网内,能同时被外部设备访问和本机访问的那些IP地址(可能不止一个)。像127.0.0.1
这种一般是不被当作本机IP的。本机IP是与具体的网络接口绑定的,比如以太网卡、无线网卡或者PPP/PPPoE拨号网络的虚拟网卡,想要正常工作都要绑定一个地址,否则其他设备就不知道如何访问它。
小例子剧场(帮助理解本机IP、127.0.0.1和0.0.0.0)
现在有两台pc在同一个局域网内,分别为pc1与pc2,pc1上有一个网卡,IP地址为192.168.10.128
- pc1中sever监听
127.0.0.1
,则pc1中的client可以连上127.0.0.1
,192.168.10.128
连不上;而pc2中client都连不上。 - pc1中sever监听
192.168.10.128
,则pc1中的client可以连上192.168.10.128
,127.0.0.1
连不上;而pc2中client能连上192.168.10.128
。 - pc1中sever监听
0.0.0.0
,则pc1中的client可以连上127.0.0.1
和192.168.10.128
,pc2中的client能连上192.168.10.128
。
一般情况下我们在本地建立的MySQL数据库都是默认域名地址localhost(127.0.0.1)端口号是:3306
上图的两个数据库其实是一个因为他们的IP地址都是一样的。
先建立连接到我本地的数据库lab2

pymysql
import pymysql |
连接成功后会返回
MySQL database connection was successful |
获取MySQL版本号测试是否连接成功
# 获取MySQL版本号测试是否连接成功 |
成功后返回我的MySQL版本号:{'version()': '8.0.41'}
连接成功后先用SQL在lab2中创建一张test_table表用于接下来的操作
use lab2; |
下图中我已向其中添加了一些数据了,请忽略
之后我们就可以写插入函数了:
def insert_data_mysql(connection, data): |
然后我们自己造些测试数据:
data_to_insert_before_mysql = [[1, '1', '测试一下!', '11', '相忘于江湖', "64", 1]] |
再写个循环扩大数据规模,多少条好呢**(´・д・)?* 1000条吧:
import copy |
data_to_insert_after_mysql = create_data_1000_mysql(data_to_insert_before_mysql) |
料理完Mysql了接下来处理MongoDB,思路都是一样的只是语法稍微不同
连接:
from pymongo import MongoClient |
测试是否连接成功:
# 列出当前正在使用的数据库以确保连接成功 |
输出结果:

连接ok
写MongoDB的插入函数:
def insert_data_mongo(collection, data): |
造数据:
data_to_insert_before_mongo = [ |
来1000条:
(和上述Mysql造1000条的逻辑是一样的,只不过在pymongo库中数据是用字典表示的)
def create_data_1000_mongo(data_to_insert): |
data_to_insert_after_mongo = create_data_1000_mongo(data_to_insert_before_mongo) |
再简单测试一下二者插入上述相同数据所用时间的差异:
#插入1000条数据的性能测试模块 |