前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python实现mysql数据同步到elasticsearch

python实现mysql数据同步到elasticsearch

作者头像
98k
发布2018-04-24 16:47:15
5.5K1
发布2018-04-24 16:47:15
举报
文章被收录于专栏:Django Scrapy

环境: python3.5 支持包: pymysql elasticsearch_dsl

安装 pymysql elasticsearch_dsl

代码语言:javascript
复制
pip install elasticsearch_dsl
pip pymysql

代码实现

代码语言:javascript
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/4/18 下午6:30
# @Author  : lizhao
# @File    : mysql_data_to_elasticsearch.py
# @Version : 1.0
# 说明: 将mysql上的数据按规则放入elasticsearch中

# 引入es_type包
from tools.es_types import ZukerType
from w3lib.html import remove_tags
# 引入处理mysql的程序包
import pymysql

##############
# 数据库参数
zukerDB_ip = '********'
zukerDB_db = '********'
zukerDB_user = '********'
zukerDB_pw = '********' 
zukerDB_******** = '********'  #表名 


##############
class MysqlMesToElastic():

    def __init__(self):
        pass

    # 获取数据库数据
    def get_mysql_data(self):
        id = 1
        db_zuker = pymysql.connect(zukerDB_ip, zukerDB_user, zukerDB_pw,
                                   zukerDB_db,charset="utf8",cursorclass = pymysql.cursors.DictCursor)
        cursor = db_zuker.cursor()
        # 取出最后一条数据
        SQL_get_mes = "select * from 58house_info order by id desc limit 1;"
        cursor.execute(SQL_get_mes)
        last_id = cursor.fetchone()['id']
        print(last_id)
        while id <= int(last_id):
        # while id <= 5:
            dict_mes = {}
            # try:
            SQL_get_mes = "select * from %s WHERE id = %s;" % (zukerDB_58house_info,id)
            # SQL_get_mes = "select * from 58house_info WHERE id = 5;"
            cursor.execute(SQL_get_mes)
            results = cursor.fetchone()
            # 如果有元素则分析元素
            if results:
                dict_mes = {
                    'title': results['name'],
                    'price': results['price'],
                    'create_date': results['sendTime'],
                    'desc': '   '.join([results['leasingMethod'],
                                  results['tags'],results['houseType'],results['company']]),
                    'area': results['address'],
                    'longitude': results['longitude'],
                    'latitude': results['latitude'],
                    'url':results['url']
                }
            id += 1
            if dict_mes:
                # 调用 process_item方法 向数据库中插数据
                self.process_item(dict_mes)



    # item = get_mysql_data()
    # 将数据写入到ES中
    def process_item(self,item):
        print(item)
        zuker = ZukerType()
        zuker.title = item['title']  # 'title': '名称',
        zuker.price = item['price']  # 'price': '价格',
        zuker.create_date =  item['create_date'] # 'create_date': '时间',
        zuker.desc = item['desc']  # 'desc': '介绍',
        zuker.area = item['area']  # 'area': '位置',
        zuker.longitude = item['longitude']  # 'longitude': '经度',
        zuker.latitude = item['latitude']  # 'latitude': '维度',
        zuker.url = item['url']  # 'url': 'url',

        # 保存
        try:
            zuker.save()
        except:
            pass

if __name__ == "__main__":
    item = MysqlMesToElastic()
    item.get_mysql_data()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.04.20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装 pymysql elasticsearch_dsl
  • 代码实现
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档