From 1855e46936cedcbd9266e51a6ce7df9f13201262 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 15 May 2024 10:56:15 +0800 Subject: [PATCH 1/4] =?UTF-8?q?pymongo=E6=94=AF=E6=8C=813.6=E4=BD=8E?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/engines/mongo.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/sql/engines/mongo.py b/sql/engines/mongo.py index b1ededea1b..d4b0a9520a 100644 --- a/sql/engines/mongo.py +++ b/sql/engines/mongo.py @@ -13,6 +13,7 @@ from dateutil.parser import parse from bson.objectid import ObjectId from bson.int64 import Int64 +from urllib.parse import quote_plus from . import EngineBase from .models import ResultSet, ReviewSet, ReviewResult @@ -795,15 +796,13 @@ def execute_check(self, db_name=None, sql=""): def get_connection(self, db_name=None): self.db_name = db_name or self.instance.db_name or "admin" auth_db = self.instance.db_name or "admin" - self.conn = pymongo.MongoClient( - self.host, - self.port, - authSource=auth_db, - connect=True, - connectTimeoutMS=10000, - ) if self.user and self.password: - self.conn[self.db_name].authenticate(self.user, self.password, auth_db) + self.user = quote_plus(self.user) + self.password = quote_plus(self.password) + uri = f"mongodb://{self.user}:{self.password}@{self.host}:{self.port}/{self.db_name}?authSource={auth_db}" + else: + uri = f"mongodb://{self.host}:{self.port}/{self.db_name}" + self.conn = pymongo.MongoClient(uri, connect=True, connectTimeoutMS=10000) return self.conn def close(self): From 757959bd0f454008f7f21dc9d1bfb8cdd8ebfe77 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 16 May 2024 09:19:15 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BD=BFpymongo=E6=94=AF=E6=8C=81mongo3.6?= =?UTF-8?q?=E4=BD=8E=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/engines/mongo.py | 6 +++--- sql/engines/redis.py | 4 ++++ sql/models.py | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/sql/engines/mongo.py b/sql/engines/mongo.py index d4b0a9520a..29285ba1fd 100644 --- a/sql/engines/mongo.py +++ b/sql/engines/mongo.py @@ -797,9 +797,9 @@ def get_connection(self, db_name=None): self.db_name = db_name or self.instance.db_name or "admin" auth_db = self.instance.db_name or "admin" if self.user and self.password: - self.user = quote_plus(self.user) - self.password = quote_plus(self.password) - uri = f"mongodb://{self.user}:{self.password}@{self.host}:{self.port}/{self.db_name}?authSource={auth_db}" + user = quote_plus(self.user) + password = quote_plus(self.password) + uri = f"mongodb://{user}:{password}@{self.host}:{self.port}/{self.db_name}?authSource={auth_db}" else: uri = f"mongodb://{self.host}:{self.port}/{self.db_name}" self.conn = pymongo.MongoClient(uri, connect=True, connectTimeoutMS=10000) diff --git a/sql/engines/redis.py b/sql/engines/redis.py index 771ee60731..51a47c2e4e 100644 --- a/sql/engines/redis.py +++ b/sql/engines/redis.py @@ -36,6 +36,10 @@ def get_connection(self, db_name=None): socket_connect_timeout=10, ssl=self.is_ssl, ) + elif self.mode == "sentinel": + rs = redis.sentinel([(self.host, self.port)], socket_timeout=0.1) + master = rs.discover_master('{}'.format(db_name)) + return master else: return redis.Redis( host=self.host, diff --git a/sql/models.py b/sql/models.py index 405692459d..262e185b35 100755 --- a/sql/models.py +++ b/sql/models.py @@ -192,7 +192,7 @@ class Instance(models.Model): max_length=10, default="", blank=True, - choices=(("standalone", "单机"), ("cluster", "集群")), + choices=(("standalone", "单机"), ("cluster", "集群"),("sentinel", "哨兵")), ) host = models.CharField("实例连接", max_length=200) port = models.IntegerField("端口", default=0) From a8192787f50ab44f6191e3ef67397fe8bc7d39f9 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 16 May 2024 09:22:25 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BD=BFpymongo=E6=94=AF=E6=8C=81mongo3.6?= =?UTF-8?q?=E4=BD=8E=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/engines/redis.py | 4 ---- sql/models.py | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/sql/engines/redis.py b/sql/engines/redis.py index 51a47c2e4e..771ee60731 100644 --- a/sql/engines/redis.py +++ b/sql/engines/redis.py @@ -36,10 +36,6 @@ def get_connection(self, db_name=None): socket_connect_timeout=10, ssl=self.is_ssl, ) - elif self.mode == "sentinel": - rs = redis.sentinel([(self.host, self.port)], socket_timeout=0.1) - master = rs.discover_master('{}'.format(db_name)) - return master else: return redis.Redis( host=self.host, diff --git a/sql/models.py b/sql/models.py index 262e185b35..405692459d 100755 --- a/sql/models.py +++ b/sql/models.py @@ -192,7 +192,7 @@ class Instance(models.Model): max_length=10, default="", blank=True, - choices=(("standalone", "单机"), ("cluster", "集群"),("sentinel", "哨兵")), + choices=(("standalone", "单机"), ("cluster", "集群")), ) host = models.CharField("实例连接", max_length=200) port = models.IntegerField("端口", default=0) From 632a93f3fcfd920c630b38f14462e0e562482ff7 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 26 Jun 2024 16:07:56 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E5=AF=B9schemasync=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E6=AF=94=E5=AF=B9=E7=BB=93=E6=9E=9C=E7=9A=84=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E6=8C=89=E6=97=A5=E6=9C=9F=E5=88=86=E9=9A=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/instance.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/sql/instance.py b/sql/instance.py index 54486be745..42890466eb 100644 --- a/sql/instance.py +++ b/sql/instance.py @@ -233,9 +233,12 @@ def schemasync(request): # 提交给SchemaSync获取对比结果 schema_sync = SchemaSync() + tag = int(time.time()) + timestamp = time.time() + formatted_time = time.strftime("%Y%m%d%H%M", time.localtime(timestamp)) # 准备参数 tag = int(time.time()) - output_directory = os.path.join(settings.BASE_DIR, "downloads/schemasync/") + output_directory = os.path.join(settings.BASE_DIR, "downloads/schemasync/",formatted_time) os.makedirs(output_directory, exist_ok=True) args = { "sync-auto-inc": sync_auto_inc, @@ -264,13 +267,13 @@ def schemasync(request): # 非全部数据库对比可以读取对比结果并在前端展示 if db_name != "*": date = time.strftime("%Y%m%d", time.localtime()) - patch_sql_file = "%s%s_%s.%s.patch.sql" % ( + patch_sql_file = "%s/%s_%s.%s.patch.sql" % ( output_directory, target_db_name, tag, date, ) - revert_sql_file = "%s%s_%s.%s.revert.sql" % ( + revert_sql_file = "%s/%s_%s.%s.revert.sql" % ( output_directory, target_db_name, tag,