将数据刷入zinc
This commit is contained in:
		
							
								
								
									
										59
									
								
								main.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								main.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
				
			|||||||
 | 
					import json
 | 
				
			||||||
 | 
					import base64
 | 
				
			||||||
 | 
					import pymysql
 | 
				
			||||||
 | 
					import requests
 | 
				
			||||||
 | 
					import dotenv
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONFIG = dotenv.dotenv_values(".env")
 | 
				
			||||||
 | 
					user = "admin"
 | 
				
			||||||
 | 
					password = "Complexpass#123"
 | 
				
			||||||
 | 
					bas64encoded_creds = base64.b64encode(bytes(f"{user}:{password}", "utf-8")).decode("utf-8")
 | 
				
			||||||
 | 
					headers = {"Content-type": "application/json", "Authorization": f"Basic {bas64encoded_creds}"}
 | 
				
			||||||
 | 
					index = "images"
 | 
				
			||||||
 | 
					zinc_host = "https://zincsearch.gameui.net"
 | 
				
			||||||
 | 
					zinc_url = f"{zinc_host}/api/{index}/_doc"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 将数据刷入zinc, 并保持同步更新
 | 
				
			||||||
 | 
					# 如果SQL中某一条数据被删除, 那么zinc中也要删除
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def connect_to_mysql():
 | 
				
			||||||
 | 
					    return pymysql.connect(host=CONFIG['MYSQL_HOST'], user=CONFIG['MYSQL_USER'], password=CONFIG['MYSQL_PASSWORD'], database=CONFIG['MYSQL_NAME'], cursorclass=pymysql.cursors.SSDictCursor)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 查询已存在的数据写入zinc  LIMIT 0,10
 | 
				
			||||||
 | 
					def query_data(conn):
 | 
				
			||||||
 | 
					    with conn.cursor(pymysql.cursors.SSCursor) as cursor:
 | 
				
			||||||
 | 
					        cursor.execute("SELECT id, text FROM web_images WHERE text!='' AND text!='[]'")
 | 
				
			||||||
 | 
					        for id, text in cursor:
 | 
				
			||||||
 | 
					            data = { "_id": str(id), "text": " ".join([item['text'] for item in json.loads(text)]) }
 | 
				
			||||||
 | 
					            res = requests.put(zinc_url, headers=headers, data=json.dumps(data), proxies={'http': '', 'https': ''})
 | 
				
			||||||
 | 
					            print("\033[1;32m{}\033[0m".format(id) if json.loads(res.text)['message'] == 'ok' else id, data['text'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					query_data(connect_to_mysql())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# TODO 数据被删除时, zinc中也要删除
 | 
				
			||||||
 | 
					# TODO 可以监听SQL日志, 一旦有数据变动, 就更新zinc
 | 
				
			||||||
 | 
					# TODO 为数据之间建立事件关联, 当删除一条图像数据时, 也要删除对应的图像
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 查询数据
 | 
				
			||||||
 | 
					#query = {
 | 
				
			||||||
 | 
					#    "query": {
 | 
				
			||||||
 | 
					#        "bool": {
 | 
				
			||||||
 | 
					#            "must": [
 | 
				
			||||||
 | 
					#                {
 | 
				
			||||||
 | 
					#                    "query_string": {
 | 
				
			||||||
 | 
					#                        "query": "City:是否"
 | 
				
			||||||
 | 
					#                    }
 | 
				
			||||||
 | 
					#                }
 | 
				
			||||||
 | 
					#            ]
 | 
				
			||||||
 | 
					#        }
 | 
				
			||||||
 | 
					#    },
 | 
				
			||||||
 | 
					#    "sort": [
 | 
				
			||||||
 | 
					#        "-@timestamp"
 | 
				
			||||||
 | 
					#    ],
 | 
				
			||||||
 | 
					#    "from": 0,
 | 
				
			||||||
 | 
					#    "size": 100
 | 
				
			||||||
 | 
					#}
 | 
				
			||||||
 | 
					#zinc_url = zinc_host + "/es/" + index + "/_search"
 | 
				
			||||||
 | 
					#res = requests.post(zinc_url, headers=headers, data=json.dumps(query), proxies={'http': '', 'https': ''})
 | 
				
			||||||
 | 
					#print(json.dumps(json.loads(res.text), indent=4, ensure_ascii=False))
 | 
				
			||||||
		Reference in New Issue
	
	Block a user