From 3675b90ab5c87825704356ff7b9c18d4a6c90959 Mon Sep 17 00:00:00 2001 From: chenjiale Date: Wed, 24 Dec 2025 14:30:22 +0800 Subject: [PATCH] =?UTF-8?q?```=20feat:=20=E4=BB=8EMySQL=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E5=88=B0=E8=BE=BE=E6=A2=A6=E6=95=B0=E6=8D=AE=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 替换pymysql为dmPython驱动 - 添加达梦数据库连接类DaMeng,支持JDBC URL解析 - 实现数据库URL解析函数_parse_dm_jdbc_url,支持schema参数 - 更新配置文件添加达梦数据库连接配置 - 修改数据访问层从MySQL到达梦数据库 ``` --- PCA_Test.py | 52 ++++++++++++++++++++++++++++++----------------- config.py | 5 ++++- requirements.txt | Bin 508 -> 233 bytes 3 files changed, 37 insertions(+), 20 deletions(-) diff --git a/PCA_Test.py b/PCA_Test.py index b60b0f8..932715d 100644 --- a/PCA_Test.py +++ b/PCA_Test.py @@ -7,7 +7,8 @@ PCA source code import numpy as np import json -import pymysql +import dmPython +from urllib.parse import urlparse, parse_qs import requests import config @@ -145,32 +146,45 @@ class MSSQL: self.conn.close() -class MySQL: - def __init__(self, host, user, pwd, database): - self.host = host +def _parse_dm_jdbc_url(jdbc_url): + if not jdbc_url: + raise NameError("没有设置数据库URL") + url = jdbc_url + if url.startswith("jdbc:"): + url = url[len("jdbc:"):] + parsed = urlparse(url) + host = parsed.hostname + port = parsed.port or 5236 + schema = None + if parsed.query: + params = parse_qs(parsed.query) + schema_list = params.get("schema") or params.get("SCHEMA") + if schema_list: + schema = schema_list[0] + return host, port, schema + + +class DaMeng: + def __init__(self, jdbc_url, user, pwd): + self.jdbc_url = jdbc_url self.user = user self.pwd = pwd - self.db = database + self.conn = None def __GetConnect(self): - """建立 MySQL 连接并返回 cursor""" - if not self.db: - raise NameError("没有设置数据库信息") - - self.conn = pymysql.connect( - host=self.host, - port=config._PORT, # MySQL 端口,例:3306 + """建立达梦连接并返回 cursor""" + host, port, schema = _parse_dm_jdbc_url(self.jdbc_url) + self.conn = dmPython.connect( user=self.user, password=self.pwd, - database=self.db, - charset="utf8mb4", - cursorclass=pymysql.cursors.Cursor + server=host, + port=port ) - cur = self.conn.cursor() if not cur: raise NameError("连接数据库失败") - + if schema: + cur.execute(f"SET SCHEMA {schema}") return cur def ExecQuery(self, sql): @@ -188,13 +202,13 @@ class MySQL: self.conn.commit() self.conn.close() def get_model_by_ID(model_id, version="v-test"): - ms = MySQL(host=config._SQL_IP, user="root", pwd="powerSIS#123", database="alert") + ms = DaMeng(jdbc_url=config._DM_URL, user=config._DM_USER, pwd=config._DM_PASSWORD) resList = ms.ExecQuery(f"SELECT Model_info FROM model_cfg where model_id={model_id}") return json.loads(resList[0][0]) def get_model_by_id_and_version(model_id, version): - ms = MySQL(host=config._SQL_IP, user="root", pwd="powerSIS#123", database="alert") + ms = DaMeng(jdbc_url=config._DM_URL, user=config._DM_USER, pwd=config._DM_PASSWORD) resList = ms.ExecQuery(f"SELECT Model_info FROM model_version where model_id={model_id} and version='{version}'") return json.loads(resList[0][0]) diff --git a/config.py b/config.py index 6a64511..1ca10c0 100644 --- a/config.py +++ b/config.py @@ -3,4 +3,7 @@ _SQL_IP = "120.26.116.243" # 数据库IP _EXA_IP = "120.26.116.243" # EXA IP _CLEAN_IP = "172.28.137.231:8098" # EXA清洗接口IP -_PORT = 3306 # port \ No newline at end of file +_PORT = 3306 # port +_DM_URL = "jdbc:dm://120.26.116.243:5236?schema=ALERT" +_DM_USER = "SYSDBA" +_DM_PASSWORD = "powerSIS123" diff --git a/requirements.txt b/requirements.txt index 476659f9dd9c9b03f831e49af2651bb75c836096..db448a77c0e6f04245c8c31ef33eb3b54f9800f4 100644 GIT binary patch literal 233 zcmXAjOAdoD3T9_~`0%8`kvzBz)89wEet0OfVQQ^?y8Y^7T;s}ezlbl3o;+Y|FtZLEo+v0{QQYAqrzJ?wa52~a?MkZdR_Zd->Onh7V z*hrx|$uY23hqKSJIQ;0HwH-6sFoSg8@kxCLixbnu^QG7a>X?6|;u<=afoWyKYKINe z*Gw?7*RrP~D8;>J!ir8p#a|NYu5`l{tA$CrBBBj_$G_Q9uhClPr?Wn#+@r@cBvsuq Ur6Cjb(nJ62{^w}_aznlH7r6dRqyPW_ -- 2.30.2