当前位置:首页 > 文章列表 > 数据库 > MySQL > Python操作ES的方式及与Mysql数据同步的方法

Python操作ES的方式及与Mysql数据同步的方法

来源:亿速云 2023-04-19 14:01:56 0浏览 收藏

哈喽!今天心血来潮给大家带来了《Python操作ES的方式及与Mysql数据同步的方法》,想必大家应该对数据库都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习数据库,千万别错过这篇文章~希望能帮助到你!

Python操作Elasticsearch的两种方式

# 官方提供的:Elasticsearch
# pip install elasticsearch
# GUI:pyhon能做图形化界面编程吗?
	-Tkinter
  -pyqt
# 使用(查询是重点)
# pip3 install elasticsearch
https://github.com/elastic/elasticsearch-py
from elasticsearch import Elasticsearch
obj = Elasticsearch(['127.0.0.1:9200','192.168.1.1:9200','192.168.1.2:9200'],)
# 创建索引(Index)
# body:用来干什么?mapping:{},setting:{}
# result = obj.indices.create(index='user',ignore=400)
# print(result)
# 删除索引
# result = obj.indices.delete(index='user', ignore=[400, 404])
# 插入和查询数据(文档的增删查改),是最重要
# 插入数据
# POST news/politics/1
# {'userid': '1', 'username': 'lqz','password':'123'}
# data = {'userid': '1', 'username': 'lqz','password':'123'}
# result = obj.create(index='news', doc_type='politics', id=1, body=data)
# print(result)
# 更新数据
'''
不用doc包裹会报错
ActionRequestValidationException[Validation Failed: 1: script or doc is missing
'''
# data ={'doc':{'userid': '1', 'username': 'lqz','password':'123ee','test':'test'}}
# result = obj.update(index='news', doc_type='politics', body=data, id=1)
# print(result)
# 删除数据
# result = obj.delete(index='news', doc_type='politics', id=1)
# 查询
# 查找所有文档
# query = {'query': {'match_all': {}}}
#  查找名字叫做jack的所有文档
# query = {'query': {'match': {'desc': '娇憨可爱'}}}
# query = {'query': {'term': {'from': 'sheng'}}}
query = {'query': {'term': {'name': '娘子'}}}
# term和match的区别
# term是短语查询,不会对term的东西进行分词
# match 会多match的东西进行分词,再去查询
# 查找年龄大于11的所有文档
# allDoc = obj.search(index='lqz', doc_type='doc', body=query)
allDoc = obj.search(index='lqz', doc_type='doc', body=query)
print(allDoc)
import json
print(json.dumps(allDoc))
# print(allDoc['hits']['hits'][0]['_source'])
# 如何集成到django项目中:创建索引,提前创建好就行了
# 插入数据,查询数据,修改数据
# query = {'query': {'term': {'name': '娘子'}}}
# allDoc = obj.search(index='lqz', doc_type='doc', body=query)
# json格式直接返回
# saas :软件即服务,不是用人家服务,而是写服务给别人用----》正常的开发
# 舆情监测系统:(爬虫)
# 只监控微博---》宜家:微博,百度贴吧,上市公司
# 公安:负面的,---》追踪到哪个用户发的---》找上门了
# qq群,微信群----》舆情监控(第三方做不了,腾讯出的舆情监控,第三方机构跟腾讯合作,腾讯提供接口,第三方公司做)
# 平台开发出来,别人买服务---》买一年的微博关键字监控

ERP:公司财务,供应链

某个大公司,金蝶,用友,开发了软件----》你们公司自己买服务器---》软件跑在你服务器上
saas模式:公司买服务,10年服务----》账号密码---》登进去就能操作---》出了问题找用友---》服务器在别人那---》政务云,各种云---所有东西上云

---政府花钱买的东西---》用友敢泄露吗?
---未来的云计算---》只能能上网---》计算机运算能力有限---》上云买服务---》计算1+。。。+100  ---》买了计算服务,直接拿到结果 

# 第二种使用方式
# https://github.com/elastic/elasticsearch-dsl-py
# pip3 install elasticsearch-dsl
from datetime import datetime
from elasticsearch_dsl import Document, Date, Nested, Boolean,analyzer, InnerDoc, Completion, Keyword, Text,Integer
from elasticsearch_dsl.connections import connections
connections.create_connection(hosts=["localhost"])
class Article(Document):
    title = Text(analyzer='ik_max_word', search_analyzer="ik_max_word", fields={'title': Keyword()})
    author = Text()
    class Index:
        name = 'myindex'  # 索引名
    def save(self, ** kwargs):
        return super(Article, self).save(** kwargs)
if __name__ == '__main__':
    # Article.init()  # 创建映射
    # 保存数据
    # article = Article()
    # article.title = "测试数据"
    # article.author = "egon"
    # article.save()  # 数据就保存了
    #查询数据
    # s=Article.search()
    # s = s.filter('match', title="测试")
    # results = s.execute()
    # # 类比queryset对象,列表中一个个对象
    # # es中叫Response,当成一个列表,列表中放一个个对象
    # print(results)
    #删除数据
    # s = Article.search()
    # s = s.filter('match', title="测试").delete()
    #修改数据
    s = Article().search()
    s = s.filter('match', title="测试")
    results = s.execute()
    print(results[0])
    results[0].title="xxx"
    results[0].save()
    # 其他操作,参见文档

mysql和Elasticsearch同步数据

# 只要article表插入一条数据,就自动同步到es中
# 第一种方案:
	-每当aritcle表插入一条数据(视图类中,Article.objects.create(),update)
  -往es中插入一条
  -缺陷:代码耦合度高,改好多地方
# 第二种方案:
	-重写create方法,重写update方法
  -缺陷:同步操作---》es中插入必须返回结果才能继续往下走
# 第三种方案:
	-用celery,做异步
  -缺陷:引入celery,还得有消息队列。。。
# 第四种方案:(用的最多)
	-重写create方法,重写update方法,用信号存入,异步操作
  -缺陷:有代码侵入
# 第五种方案:(项目不写代码,自动同步),第三方开源的插件
	-https://github.com/siddontang/go-mysql-elasticsearch----go写
  -你可以用python重写一个,放到git上给别人用(读了mysql的日志)
  -跟平台无关,跟语言无关
  -如何使用:
  	-源码下载---》交叉编译---》可执行文件--》运行起来--》配置文件配好,就完事了
    # 配置文件
    [[source]]
    schema = "数据库名"
    tables = ["article"]
    [[rule]]
    schema = "数据库名"
    table = "表明"
    index = "索引名"
    type = "类型名"
  # 缺陷:
  	-es跟mysql同步时,不希望把表所有字段都同步,mysql的多个表对着es的一个类型
  # 话术升级:
  	-一开始同步
    -用了开源插件(读取mysql日志,连接上es,进行同步)
    -用信号自己写的
    -再高端:仿着他的逻辑,用python自己写的,----》(把这个东西开源出来)

haystack的使用

  • django上的一个第三方模块 ---》你使用过的django第三方模块有哪些?

  • 可以在django上实现全文检索

  • 相当于orm--》对接es,solr,whoosh

  • https://www.yisu.com/article/218631.htm

  • 不支持es,6以上版本

  • haystack+Elasticsearch实现全文检索

  • es的原生操作:ELasticsearch   Elasticsearch-dsl

Redis补充

#1  只有5种数据结构:
	-多种数据结构:字符串,hash,列表,集合,有序集合
#2  单线程,速度为什么这么快?
  -本质还是因为是内存数据库
  -epoll模型(io多路复用)
  -单线程,没有线程,进程间的通信
#3 linux上 安装redis#下载
  https://redis.io/download/
  #解压
  tar -xzf redis-5.0.7.tar.gz
  #建立软连接
  ln -s redis-5.0.7 redis
  cd redis
  make&&make install
  # bin路径下几个命令:redis-cli,redis-server,redis-sentinel
  # 在任意位置能够执行redis-server 如何做?配置环境变量
#4  启动redis的三种方式
  	-方式一:(一般不用,没有配置文件)
    	-redis-server
    -方式二:(用的也很少)
    	redis-serve --port 6380
    -方式三:(都用这种,配置文件)
    	daemonize yes #是否以守护进程启动
      pidfile /var/run/redis.pid   #进程号的位置,删除
      port 6379    #端口号
      dir "/opt/soft/redis/data"  #工作目录
      logfile 6379.log #日志位置  
      # 启动:redis-server redis.conf1
#5 客户端连接
  redis-cli -h 127.0.0.1 -p 6379
#6 使用场景
  -看md文档

终于介绍完啦!小伙伴们,这篇关于《Python操作ES的方式及与Mysql数据同步的方法》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布数据库相关知识,快来关注吧!

版本声明
本文转载于:亿速云 如有侵犯,请联系study_golang@163.com删除
Windows 10 的全屏设置唠叨回来了——这是禁用它的方法Windows 10 的全屏设置唠叨回来了——这是禁用它的方法
上一篇
Windows 10 的全屏设置唠叨回来了——这是禁用它的方法
高通已经找到了一种通过蓝牙耳机支持无损音频的方法——苹果会是下一个吗?
下一篇
高通已经找到了一种通过蓝牙耳机支持无损音频的方法——苹果会是下一个吗?
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • ChatExcel酷表:告别Excel难题,北大团队AI助手助您轻松处理数据
    ChatExcel酷表
    ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
    3183次使用
  • Any绘本:开源免费AI绘本创作工具深度解析
    Any绘本
    探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
    3394次使用
  • 可赞AI:AI驱动办公可视化智能工具,一键高效生成文档图表脑图
    可赞AI
    可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
    3426次使用
  • 星月写作:AI网文创作神器,助力爆款小说速成
    星月写作
    星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
    4531次使用
  • MagicLight.ai:叙事驱动AI动画视频创作平台 | 高效生成专业级故事动画
    MagicLight
    MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
    3803次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码