zoukankan      html  css  js  c++  java
  • 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)
          
    

      

  • 相关阅读:
    zoj3299 Fall the Brick
    hdu4533 威威猫系列故事——晒被子
    FZU 1650 1752 a^b mod c
    Codeforces Round #136 (Div. 1) B. Little Elephant and Array
    Codeforces Round #292 (Div. 1) C. Drazil and Park
    Uva 12436 Rip Van Winkle's Code
    Codeforces Beta Round #19 D. Points
    hdu1513 Palindrome
    poj1160 Post Office
    zjnu1181 石子合并【基础算法・动态规划】——高级
  • 原文地址:https://www.cnblogs.com/c-x-a/p/9175252.html
Copyright © 2011-2022 走看看