diff --git a/main.py b/main.py new file mode 100644 index 0000000..2d8e438 --- /dev/null +++ b/main.py @@ -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))