從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數據庫采用數據池連接的方式,更高效更方便。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM