python爬虫模块之数据存储模块

数据存储模块的话,目前我这用的比较多的是存储到mysql,所以下面的这个例子也是保存到mysql,用到了ORM映射的SQLAlchemy

,(ORM:Object-Relational Mapping,把关系数据库的表结构映射到对象上),使用create_engine()来初始化数据库连接。

SQLAlchemy用一个字符串表示连接信息:

'数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名'

然后使用pandas tosql进行了保存,对于简单的数据保存,尤其是批量存储来说效率还是提高的,

也不需要写原生的sql语句但是如果有其他复杂的操作就只能sqlalchemy或pymysql配合用了

关于大概过程就是把字典list类型的数据转换成dataframe之后在操作,需要强调一下的是if_exists参数的含义

下面说一下关于if_exists的几个参数,都是对表来说的不是对于数据
 fail的意思如果表存在,啥也不做
replace的意思,如果表存在,删了表,再建立一个新表,把数据插入
append的意思,如果表存在,把数据插入,如果表不存在创建一个表!

然后下面就看代码的实现吧

# _*_coding:utf-8 _*_
import  pandas as pd
from .config import *
from sqlalchemy import create_engine

class DataOutput(object):

    def __init__(self):
        # 引擎格式 mysql+mysqldb://root:password@localhost:3306/databasename?charset=utf8
        self.conn=create_engine(f'{DB_TYPE}+mysqldb://{USER}:{PASSWD}@{HOST}:{PORT}/{DataBase}?charset={Charset}')

    def store_data(self, data_dicts):
        if data_dicts is None:
            return None
        # data_dicts 保存成字典类别形式方便转换dataframe
        df=pd.DataFrame(data_dicts)
        pd.io.sql.to_sql(df, "sns_insight_log", con=self.conn, if_exists="append", index=False)
      

  

posted @ 2018-06-12 21:56  公众号python学习开发  阅读(979)  评论(0编辑  收藏  举报