数据存入MySQL数据库
MySQL数据库不同于mongodb和redis,属于关系型数据库,在存入数据之前必须要建表和字段,在海量数据处理的时候效率会显著变慢,也正是因为这点,爬虫的数据一般会选择存入mongodb,但是MySQL数据库支持事务,所以更适合用于建站时使用。
- 建立数据库链接
cursor= pymysql.connect("localhost","root","123456","test",charset="utf8")
cursor = db.cursor()
- 创建字段
sql = """CREATE TABLE EMPLOYER (
ID INT PRIMARY KEY AUTO_INCREMENT,
test1 CHAR(255),
test2 CHAR(20),
test3 CHAR(255) )"""
cursor.execute(sql)
- 写入数据
sql = "INSERT INTO EMPLOYER(LOGO,PRICE,AUTHER) VALUES (%s, %s, %s)"
cursor.execute(sql,value)
cursor.commit()
MySQL(可视化:Navicat for MySQL)
import pymysql
# 数据库的连接
conn = pymysql.connect(host = '127.0.0.1',port = 3306, user = 'root', password = 'password', db = 'test')
# 创建操作的游标
cursor = conn.cursor()
# 编写sql语句
# 增
sql = "insert into test_table(name, age, title, content) values('tom',22,'this is title', 'this is content')"
# 删
sql1 = "delete from test_table where id = 4"
# 查(需要fetch)
sql2 = "select * from test_table where id = 2"
# 改
sql3 = "update test_table set name = 'peter' where id = 2"
# 创建数据库
sql4 = "create database if not exists school"
# 删除数据库
sql5 = "drop database if exists school"
# 创建表
sql6 = "create table if not exists Student(Sno char(10)not null,Sname char(10),Ssex char(2),Sage int,Sdept varchar(20)) "
# 删除表
sql7 = "drop table if exists Student"
cursor.execute(sql)
conn.commit()
row = cursor.fetchone()
print(row)
数据存入MongoDB数据库
适量级的内存的 MongoDB 的性能是非常迅速,它将热数据存储在物理内存中,使得热数据的读写变得十分快。文档结构的存储方式,能够更便捷的获取数据: json 的存储格式。缺点就是无事务。
- 连接数据库
client = pymongo.MongoClient(host='127.0.0.1',port=27017)
- 连接数据库集合
url_list = client['Test']['url_list']
- 插入数据
url_info= {
'id':'00001',
'url':'baidu.com',
'table':'百度'
}
result = url_list.insert_one(url_info)
MongoDB(可视化:Studio 3T)
from pymongo import *
# 连接
client = MongoClient(host='localhost', port=27017)
# 选择库
db = client.test
# 选择集合
test_set = db.test
# 增
test_set.insert({"name":"ki", 'age':22})
test_set.insert({"name":"tom", 'age':22})
# 查
for result in test_set.find({'age':22}):
print(result)
# 删
test_set.remove({'name':'ki'})
# 改
test_set.update({'name':'tom','age':22},{'name':'peter','age':24})
数据存入Redis数据库
它就是一个不折不扣的内存数据库,除了支持 string 类型的value 外还支持string, hash, set, stortset, list 等数据结构.一般用在分布式中作为缓存数据库。
- 连接数据库
redis = StrictRedis(host='localhost', port=6379, db=0)
- 写入键值对
redis.set('key', 'value')
Redis(可视化:RedisDesktopManager)
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
# String 操作
# 增&改
r.set('name','345')
r.setrange('name',5,'a')
r.mset({"name1":'zhangsan', "name2":'lisi'})
r.setbit('name',6,0)# 二进制修改
r.incr('mont',amount=3)#执行一次自加3
r.decr('mout',amount=3)#执行一次自减3
r.append('name1','haha')#续写
# 查
print(r.get('name'))
print(r.getbit('name',0))
print(r.getrange('name1',0,3))
#删
r.delete('name')
#hash操作
#增&改
r.hset('dic_name','a1','aa')
r.hmset('dic_name',{'a2':'aa','a3':'bb'})
r.hincrby("dic_name","a",amount=2)#自增
#查
print(r.hget('dic_name','a1'))
print(r.hmget('dic_name',['a1','a2']))
print(r.hgetall('dic_name'))
print(r.hlen('dic_name'))
print(r.hexists('dic_name','a1'))
#删
r.hdel('dic_name','a1')
#list操作
#增
r.rpush('list_name',2,3,4,5)
r.lpush('list_name',1)
r.linsert('list_name','BEFORE',1,0)
#改
r.lset('list_name',0,-1)
r.lpop('list_name')
r.rpop('list_name')
r.rpoplpush('list_name','list_name')
#查
print(r.llen("list_name")) # name对应的list元素的个数
print(r.lindex("list_name",1)) #根据索引获取列表内元素
print(r.lrange("list_name",0,-1)) #分片获取元素
#删
r.lrem("list_name",2,num=0) #num=2 从前到后,删除2个;num=-2 从后向前,删除2个
r.ltrim("list_name",0,2) #移除列表内没有在该索引之内的值
#set操作
#增&改
r.sadd('set_name','aa','bb','cc')
r.sadd('set_name1','aa','bb','cc')
r.smove('set_name','set_name1','aa')#移动
#删
r.spop('set_name')
r.srem('set_name1','aa')
#查
print(r.smembers('set_name'))
print(r.scard('set_name'))#元素数量
print(r.sdiff('set_name1','set_name'))#不同
print(r.sinter('set_name','set_name1'))#交集
print(r.sunion('set_name','set_name1'))#并集
print(r.sismember('set_name','aa'))
#有序集合操作
#增&改
r.zadd('zset_name','a1',6,'a2',2,'a3',5)
r.zadd('zset_name',a4=1,a5=2)
r.zincrby('zset_name','a1',amount=2)
#查
print(r.zcard('zset_name'))#元素数量
print(r.zcount('zset_name',1,5))#数值在区间的数量
#按索引取值,desc排序规则,score_cast_func数值处理函数
print(r.zrange("zset_name",0,1,desc=False,withscores=True,score_cast_func=int))
print(r.zscore("zset_name","a1"))
print(r.zrank("zset_name", "a1")) #获取索引(从0开始)
print(r.zrevrank("zset_name", "a4"))#从大到小排序
#删
r.zrem("zset_name","a2","a5")
r.zremrangebyrank("zset_name", 3, 5) #根据排行范围删除
r.zremrangebyscore("zset_name", 3, 5) #根据分数范围删除
r.zinterstore("zset_dest",("zset_name1","zset_name2"),aggregate="MAX")#交集放入新集