python如何把数据从数据库推送elasticsearch
引言
工作中常常需要将数据库的数据推送到es用作快速搜索查询,本篇是记录自己对于此需求的学习和python方法实现
从数据库读取数据
一些基本参数变量
sql = 'select * from test.airport_message'
es_host = '127.0.0.1'
es_port = 9200
es_index = 'test_airport_message_idx'
es_type = 'airport_message'
username = '*'
passwd = '*'
gx_time_name = 'gxsj' # 数据库记录更新时间字段
连接数据库
conn = pymysql.connect("127.0.0.1", "root", "123456", "test")
cur = conn.cursor()
查询数据,构造数据格式,为了防止数据量过大,每次推送2w条。
构造格式为:
[{
"index": {
"_id": "xx"}},{
'a': 'xx', 'b': 'xx'},{
"index": {
"_id": "xx"}},{
'c': 'xx', 'd': 'xx'}]
cur.execute(sql)
# 获取表结构,以便构造推送数据映射
des = cur.description
table_desc = [item[0] for item in des]
while True:
rows = cur.fetchmany(20000)
docs = []
if not rows:
break
for row in rows:
data = {
}
# 本表主键为第一个字段,根据实际情况调整
ids = str(row[0])
for i in range(len(tab_desc