60 lines
2.1 KiB
Python
60 lines
2.1 KiB
Python
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))
|