修复sql特殊密码无法连接的问题

This commit is contained in:
try2love
2025-11-06 13:59:33 +00:00
parent 01dc676fd0
commit 148aafb2a8
4 changed files with 13 additions and 8 deletions
+3 -1
View File
@@ -7,7 +7,7 @@
""" """
from __future__ import annotations from __future__ import annotations
from urllib.parse import quote_plus
import asyncio import asyncio
import os import os
from typing import Any, Dict, Iterable, List, Optional, Union from typing import Any, Dict, Iterable, List, Optional, Union
@@ -36,6 +36,8 @@ def _build_database_url() -> str:
if os.getenv("DATABASE_URL"): if os.getenv("DATABASE_URL"):
return os.getenv("DATABASE_URL") # 直接使用外部提供的完整URL return os.getenv("DATABASE_URL") # 直接使用外部提供的完整URL
password = quote_plus(password)
if dialect in ("postgresql", "postgres"): if dialect in ("postgresql", "postgres"):
# PostgreSQL 使用 asyncpg 驱动 # PostgreSQL 使用 asyncpg 驱动
return f"postgresql+asyncpg://{user}:{password}@{host}:{port}/{db_name}" return f"postgresql+asyncpg://{user}:{password}@{host}:{port}/{db_name}"
+5 -4
View File
@@ -18,6 +18,7 @@ from sqlalchemy.ext.asyncio import create_async_engine, AsyncEngine
from sqlalchemy import inspect, text from sqlalchemy import inspect, text
from config import settings from config import settings
from loguru import logger from loguru import logger
from urllib.parse import quote_plus
# 添加项目根目录到路径 # 添加项目根目录到路径
project_root = Path(__file__).parent project_root = Path(__file__).parent
@@ -73,10 +74,10 @@ class MindSpider:
def build_async_url() -> str: def build_async_url() -> str:
dialect = (settings.DB_DIALECT or "mysql").lower() dialect = (settings.DB_DIALECT or "mysql").lower()
if dialect == "postgresql": if dialect == "postgresql":
return f"postgresql+asyncpg://{settings.DB_USER}:{settings.DB_PASSWORD}@{settings.DB_HOST}:{settings.DB_PORT}/{settings.DB_NAME}" return f"postgresql+asyncpg://{settings.DB_USER}:{quote_plus(settings.DB_PASSWORD)}@{settings.DB_HOST}:{settings.DB_PORT}/{settings.DB_NAME}"
# 默认使用 mysql 异步驱动 asyncmy # 默认使用 mysql 异步驱动 asyncmy
return ( return (
f"mysql+asyncmy://{settings.DB_USER}:{settings.DB_PASSWORD}" f"mysql+asyncmy://{settings.DB_USER}:{quote_plus(settings.DB_PASSWORD)}"
f"@{settings.DB_HOST}:{settings.DB_PORT}/{settings.DB_NAME}?charset={settings.DB_CHARSET}" f"@{settings.DB_HOST}:{settings.DB_PORT}/{settings.DB_NAME}?charset={settings.DB_CHARSET}"
) )
@@ -104,9 +105,9 @@ class MindSpider:
def build_async_url() -> str: def build_async_url() -> str:
dialect = (settings.DB_DIALECT or "mysql").lower() dialect = (settings.DB_DIALECT or "mysql").lower()
if dialect == "postgresql": if dialect == "postgresql":
return f"postgresql+asyncpg://{settings.DB_USER}:{settings.DB_PASSWORD}@{settings.DB_HOST}:{settings.DB_PORT}/{settings.DB_NAME}" return f"postgresql+asyncpg://{settings.DB_USER}:{quote_plus(settings.DB_PASSWORD)}@{settings.DB_HOST}:{settings.DB_PORT}/{settings.DB_NAME}"
return ( return (
f"mysql+asyncmy://{settings.DB_USER}:{settings.DB_PASSWORD}" f"mysql+asyncmy://{settings.DB_USER}:{quote_plus(settings.DB_PASSWORD)}"
f"@{settings.DB_HOST}:{settings.DB_PORT}/{settings.DB_NAME}?charset={settings.DB_CHARSET}" f"@{settings.DB_HOST}:{settings.DB_PORT}/{settings.DB_NAME}?charset={settings.DB_CHARSET}"
) )
+3 -2
View File
@@ -13,6 +13,7 @@ import argparse
from pathlib import Path from pathlib import Path
from datetime import datetime, timedelta from datetime import datetime, timedelta
from loguru import logger from loguru import logger
from urllib.parse import quote_plus
# 添加项目根目录到路径 # 添加项目根目录到路径
project_root = Path(__file__).parent.parent project_root = Path(__file__).parent.parent
@@ -36,9 +37,9 @@ class DatabaseManager:
try: try:
dialect = (settings.DB_DIALECT or "mysql").lower() dialect = (settings.DB_DIALECT or "mysql").lower()
if dialect in ("postgresql", "postgres"): if dialect in ("postgresql", "postgres"):
url = f"postgresql+psycopg://{settings.DB_USER}:{settings.DB_PASSWORD}@{settings.DB_HOST}:{settings.DB_PORT}/{settings.DB_NAME}" url = f"postgresql+psycopg://{settings.DB_USER}:{quote_plus(settings.DB_PASSWORD)}@{settings.DB_HOST}:{settings.DB_PORT}/{settings.DB_NAME}"
else: else:
url = f"mysql+pymysql://{settings.DB_USER}:{settings.DB_PASSWORD}@{settings.DB_HOST}:{settings.DB_PORT}/{settings.DB_NAME}?charset={settings.DB_CHARSET}" url = f"mysql+pymysql://{settings.DB_USER}:{quote_plus(settings.DB_PASSWORD)}@{settings.DB_HOST}:{settings.DB_PORT}/{settings.DB_NAME}?charset={settings.DB_CHARSET}"
self.engine = create_engine(url, future=True) self.engine = create_engine(url, future=True)
logger.info(f"成功连接到数据库: {settings.DB_NAME}") logger.info(f"成功连接到数据库: {settings.DB_NAME}")
except Exception as e: except Exception as e:
+2 -1
View File
@@ -13,7 +13,7 @@ from __future__ import annotations
import asyncio import asyncio
import os import os
from typing import Optional from typing import Optional
from urllib.parse import quote_plus
from loguru import logger from loguru import logger
from sqlalchemy.ext.asyncio import create_async_engine from sqlalchemy.ext.asyncio import create_async_engine
@@ -49,6 +49,7 @@ def _build_database_url() -> str:
port = str(settings.DB_PORT or ("3306" if dialect == "mysql" else "5432")) port = str(settings.DB_PORT or ("3306" if dialect == "mysql" else "5432"))
user = settings.DB_USER or "root" user = settings.DB_USER or "root"
password = settings.DB_PASSWORD or "" password = settings.DB_PASSWORD or ""
password = quote_plus(password)
db_name = settings.DB_NAME or "mindspider" db_name = settings.DB_NAME or "mindspider"
if dialect in ("postgresql", "postgres"): if dialect in ("postgresql", "postgres"):