从redis数据库取数据存放到本地mysql数据库
redis数据库属于非关系型数据库,数据存放在内存堆栈中,效率比较高。
其存储数据是以json格式字符串存储字典的,而类似的关系型数据库无法实现这种数据的存储。
在爬取数据时,将数据暂存到redis中,等数据采集完成后,在从redis里将数据读取,并写入mysql数据库中。
在数据采集方面不在多说,只需将项目settings文件下的pipelines管道文件里的本地数据管道注释,让redis来接收数据即可。
从redis写数据入mysql的代码实现:
其实就是一个独立的python脚本文件
import redis
import pymysql
import json,re def table_exists(con, table_name):
# 判断数据表是否已经创建
sql = 'show tables;'
con.execute(sql)
tables = [con.fetchall()]
table_list = re.findall('(\'.*?\')', str(tables))
table_list = [re.sub("'", '', each) for each in table_list] # 遍历并获得数据库表
if table_name in table_list:
return 1 # 创建了返回1
else:
return 0 # 不创建返回0 def process_item():
#redis数据库创建连接池对象 并实例化一个连接
pool=redis.ConnectionPool(host='127.0.0.1',port=6379,db=0,password='123456')
redis_cli=redis.Redis(connection_pool=pool) #创建mysql数据库连接
conn=pymysql.connect(user='root', # 用户名
password='1234', # 密码
db='lgweb', # 数据库名
host='127.0.0.1', # 地址
port=3306,
charset='utf8') table_name = 'db_read' # 数据库表
# 没有对应数据库表则创建
if (table_exists(conn.cursor(),table_name) != 1):
sql = 'create table db_read(书名 VARCHAR (30),作者 VARCHAR (30),评分 VARCHAR (10),类型 VARCHAR (30),状态 VARCHAR (30),简介 VARCHAR (50),详情 VARCHAR (1000),最新章节 VARCHAR (50),封面 VARCHAR (100))'
conn.cursor().execute(sql) # 不存在则创建数据库表 offset=0
while True: #将数据从redis里pop出来
source,data=redis_cli.blpop("read:items")
#将redis字符串转为格式化的字典
item=json.loads(data)
#创建数据库游标
cursor=conn.cursor()
sql = "insert into db_read(书名,作者,评分,类型,状态,简介,详情,最新章节,封面)VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s')" % (
item['book_name'],item['author'],item['score'],item['type'],item['state'],item['about'],item['story'],item['news'],item['photo'])
cursor.execute(sql) #执行数据插入
conn.commit() #提交记录 cursor.close() #关闭游标 offset+=1
print("正在保存第:"+str(offset)+"条记录") if __name__ == '__main__':
process_item()
redis数据库采用数据池连接的方式,更高效更方便。
从redis数据库取数据存放到本地mysql数据库的更多相关文章
- pymysql 使用twisted异步插入数据库:基于crawlspider爬取内容保存到本地mysql数据库
本文的前提是实现了整站内容的抓取,然后把抓取的内容保存到数据库. 可以参考另一篇已经实现整站抓取的文章:Scrapy 使用CrawlSpider整站抓取文章内容实现 本文也是基于这篇文章代码基础上实现 ...
- 在windows下,将mysql离线数据文件导入本地mysql数据库
1. 查看mysql路径 SELECT @@basedir AS basePath FROM DUAL 其实mysql5.6 的数据文件在 C:\ProgramData\MySQL\MySQL Ser ...
- 如何将redis中的数据导入到本地MongoDB和MySQL数据库
将redis中的数据导入到本地MongoDB数据库 创建一个process_items_mongodb.py文件(文件名自定义): #!/usr/bin/env python # -*- coding ...
- 多线程查询数据,将结果存入到redis中,最后批量从redis中取数据批量插入数据库中【我】
多线程查询数据,将结果存入到redis中,最后批量从redis中取数据批量插入数据库中 package com.xxx.xx.reve.service; import java.util.ArrayL ...
- C#程序中从数据库取数据时需注意数据类型之间的对应,int16\int32\int64
private void btn2_Click(object sender, RoutedEventArgs e) { using (SqlConnection ...
- [saiku] 将saiku自带的H2嵌入式数据库迁移到本地mysql数据库
saiku数据库的表和用户默认创建是在启动项目的时候,通过初始化 saiku-beans.xml 中的 h2database 这个 bean 执行org.saiku.service.Database类 ...
- 一、初识MySQL数据库 二、搭建MySQL数据库(重点) 三、使用MySQL数据库 四、认识MySQL数据库的数据类型 五、操作MySQL数据库的数据(重点)
一.初识MySQL数据库 ###<1>数据库概述 1. 数据库 长期存储在计算机内的,由组织的可共享的数据集合 存储数据的仓库 文件 ...
- Holer实现外网访问本地MySQL数据库
外网访问内网MySQL数据库 内网主机上安装了MySQL数据库,只能在局域网内访问,怎样从公网也能访问本地MySQL数据库? 本文将介绍使用holer实现的具体步骤. 1. 准备工作 1.1 安装并启 ...
- 忘记本地MySQL数据库密码的解决方案。
忘记本地MySQL数据库密码,解决方案,分以下10个步骤: 参考链接: https://blog.csdn.net/weidong_y/article/details ...
随机推荐
- 源码简析Spring-Integration执行过程
一,前言 Spring-Integration基于Spring,在应用程序中启用了轻量级消息传递,并支持通过声明式适配器与外部系统集成.这一段官网的介绍,概况了整个Integration的用途.个人感 ...
- PageHelper--Mybatis分页插件(ssm框架下的使用)
1.导入PageHelper依赖 <!-- MyBatis 分页插件 --> <dependency> <groupId>com.github.pagehelper ...
- What is maven?
Introduction Maven, a Yiddish word meaning accumulator(累加器) of knowledge, began as an attempt to sim ...
- 为什么代码规范要求SQL语句不要过多的join?
面试官:有操作过Linux吗? 我:有的呀 面试官:我想查看内存的使用情况该用什么命令 我:free 或者 top 面试官:那你说一下用free命令都可以看到啥信息 我:那,如下图所示 可以看到内存以 ...
- 《面试补习》- Java集合知识梳理
一.ArrayList ArrayList 底层数据结构为 动态数组 ,所以我们可以将之称为数组队列. ArrayList 的依赖关系: public class ArrayList<E> ...
- 陋居寡闻,初探Github CLI For Windows,开启命令行撸铁时代
简介 gh is GitHub on the command line. It brings pull requests, issues, and other GitHub concepts to t ...
- POJ 3984 迷宫(BFS)
入门BFS,第一次做,部分借鉴了大牛的 #include <iostream> #include <cstdio> #include <queue> using n ...
- LVS-NAT模式的实现
一.架构如下: 二.安装过程 1.配置"互联网"服务器 1.1.修改服务器ip为192.168.10.101/24 [root@internet ~]# ip a 1: lo: & ...
- Centos 8 误删/boot文件夹下文件后的恢复
一.环境 Centos8 二.过程 1.查看/boot底下文件 ls /boot 2.模拟误删/boot底下文件 rm -rf /boot/*ls /boot 3.reboot,无法正常启动 4.在v ...
- sed 大括号 sed {} 的作用详解
今天看别人写的脚本的时候,看到了sed -r {} 我看网上对于这个的记录比较少,所以就写了这篇随笔. 先看一下效果 cat test.txt image: qqq/www/eee:TAG ...